gipity 1.0.336 → 1.0.339

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 (53) hide show
  1. package/dist/__tests__/claude-trust.test.d.ts +1 -0
  2. package/dist/__tests__/claude-trust.test.js +71 -0
  3. package/dist/__tests__/claude-trust.test.js.map +1 -0
  4. package/dist/__tests__/cli-smoke.test.js +7 -2
  5. package/dist/__tests__/cli-smoke.test.js.map +1 -1
  6. package/dist/__tests__/relay-machine-id.test.d.ts +1 -0
  7. package/dist/__tests__/relay-machine-id.test.js +41 -0
  8. package/dist/__tests__/relay-machine-id.test.js.map +1 -0
  9. package/dist/__tests__/relay-redact.test.d.ts +1 -0
  10. package/dist/__tests__/relay-redact.test.js +78 -0
  11. package/dist/__tests__/relay-redact.test.js.map +1 -0
  12. package/dist/__tests__/setup-skills-block.test.d.ts +1 -0
  13. package/dist/__tests__/setup-skills-block.test.js +65 -0
  14. package/dist/__tests__/setup-skills-block.test.js.map +1 -0
  15. package/dist/adopt-cwd.d.ts +3 -0
  16. package/dist/adopt-cwd.js +1 -0
  17. package/dist/adopt-cwd.js.map +1 -1
  18. package/dist/auth.d.ts +5 -0
  19. package/dist/auth.js +14 -0
  20. package/dist/auth.js.map +1 -1
  21. package/dist/commands/add.js +13 -2
  22. package/dist/commands/add.js.map +1 -1
  23. package/dist/commands/claude.d.ts +14 -0
  24. package/dist/commands/claude.js +45 -1
  25. package/dist/commands/claude.js.map +1 -1
  26. package/dist/commands/init.js +71 -10
  27. package/dist/commands/init.js.map +1 -1
  28. package/dist/commands/realtime.js +25 -1
  29. package/dist/commands/realtime.js.map +1 -1
  30. package/dist/index.js +33 -2
  31. package/dist/index.js.map +1 -1
  32. package/dist/knowledge.d.ts +4 -4
  33. package/dist/knowledge.js +40 -19
  34. package/dist/knowledge.js.map +1 -1
  35. package/dist/project-setup.d.ts +5 -0
  36. package/dist/project-setup.js +9 -4
  37. package/dist/project-setup.js.map +1 -1
  38. package/dist/prompts.js +1 -0
  39. package/dist/prompts.js.map +1 -1
  40. package/dist/relay/daemon.js +30 -4
  41. package/dist/relay/daemon.js.map +1 -1
  42. package/dist/relay/machine-id.d.ts +2 -0
  43. package/dist/relay/machine-id.js +64 -0
  44. package/dist/relay/machine-id.js.map +1 -0
  45. package/dist/relay/onboarding.js +2 -1
  46. package/dist/relay/onboarding.js.map +1 -1
  47. package/dist/relay/redact.d.ts +34 -0
  48. package/dist/relay/redact.js +80 -0
  49. package/dist/relay/redact.js.map +1 -0
  50. package/dist/setup.d.ts +38 -0
  51. package/dist/setup.js +82 -11
  52. package/dist/setup.js.map +1 -1
  53. package/package.json +2 -2
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,71 @@
1
+ /**
2
+ * markFolderTrusted - pre-accepts Claude Code's per-directory workspace-trust
3
+ * dialog by writing `projects["<dir>"].hasTrustDialogAccepted` into
4
+ * ~/.claude.json. Verifies the write is additive (every other key preserved),
5
+ * idempotent, and never clobbers a malformed config.
6
+ */
7
+ import { describe, it, beforeEach, afterEach } from 'node:test';
8
+ import assert from 'node:assert/strict';
9
+ import { mkdtempSync, writeFileSync, readFileSync, existsSync } from 'fs';
10
+ import { join } from 'path';
11
+ import { tmpdir } from 'os';
12
+ import { markFolderTrusted } from '../commands/claude.js';
13
+ const PROJECT = '/home/test/GipityProjects/project-001';
14
+ let home;
15
+ let origHome;
16
+ beforeEach(() => {
17
+ home = mkdtempSync(`${tmpdir()}/gipity-trust-test-`);
18
+ origHome = process.env.HOME;
19
+ process.env.HOME = home; // os.homedir() honors $HOME on POSIX
20
+ });
21
+ afterEach(() => {
22
+ if (origHome === undefined)
23
+ delete process.env.HOME;
24
+ else
25
+ process.env.HOME = origHome;
26
+ });
27
+ function claudeJson() { return join(home, '.claude.json'); }
28
+ function readCfg() { return JSON.parse(readFileSync(claudeJson(), 'utf-8')); }
29
+ describe('markFolderTrusted', () => {
30
+ it('adds the trust entry while preserving other top-level keys and projects', () => {
31
+ writeFileSync(claudeJson(), JSON.stringify({
32
+ numStartups: 42,
33
+ projects: { '/some/other/dir': { hasTrustDialogAccepted: true, foo: 1 } },
34
+ }));
35
+ markFolderTrusted(PROJECT);
36
+ const cfg = readCfg();
37
+ assert.equal(cfg.projects[PROJECT].hasTrustDialogAccepted, true);
38
+ assert.equal(cfg.numStartups, 42, 'unrelated top-level keys preserved');
39
+ assert.deepEqual(cfg.projects['/some/other/dir'], { hasTrustDialogAccepted: true, foo: 1 }, 'other projects untouched');
40
+ });
41
+ it('merges into an existing project entry without dropping its other fields', () => {
42
+ writeFileSync(claudeJson(), JSON.stringify({
43
+ projects: { [PROJECT]: { allowedTools: ['Bash'], history: [1, 2] } },
44
+ }));
45
+ markFolderTrusted(PROJECT);
46
+ const cfg = readCfg();
47
+ assert.equal(cfg.projects[PROJECT].hasTrustDialogAccepted, true);
48
+ assert.deepEqual(cfg.projects[PROJECT].allowedTools, ['Bash']);
49
+ assert.deepEqual(cfg.projects[PROJECT].history, [1, 2]);
50
+ });
51
+ it('is a no-op when the folder is already trusted', () => {
52
+ const original = JSON.stringify({
53
+ projects: { [PROJECT]: { hasTrustDialogAccepted: true } },
54
+ }, null, 2);
55
+ writeFileSync(claudeJson(), original);
56
+ markFolderTrusted(PROJECT);
57
+ assert.equal(readFileSync(claudeJson(), 'utf-8'), original, 'file untouched');
58
+ });
59
+ it('creates ~/.claude.json when it does not exist', () => {
60
+ assert.equal(existsSync(claudeJson()), false);
61
+ markFolderTrusted(PROJECT);
62
+ assert.equal(readCfg().projects[PROJECT].hasTrustDialogAccepted, true);
63
+ });
64
+ it('leaves a malformed config untouched and does not throw', () => {
65
+ const garbage = '{ this is not json';
66
+ writeFileSync(claudeJson(), garbage);
67
+ assert.doesNotThrow(() => markFolderTrusted(PROJECT));
68
+ assert.equal(readFileSync(claudeJson(), 'utf-8'), garbage, 'malformed file not clobbered');
69
+ });
70
+ });
71
+ //# sourceMappingURL=claude-trust.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-trust.test.js","sourceRoot":"","sources":["../../src/__tests__/claude-trust.test.ts"],"names":[],"mappings":"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"}
@@ -7,16 +7,21 @@ import { runCli } from './helpers/spawn-cli.js';
7
7
  const __dirname = dirname(fileURLToPath(import.meta.url));
8
8
  const PKG_VERSION = JSON.parse(readFileSync(resolve(__dirname, '..', '..', 'package.json'), 'utf-8')).version;
9
9
  describe('cli-smoke: --version and --help', () => {
10
- it('--version prints the package version', () => {
10
+ it('--version prints the package version + auth status', () => {
11
11
  const r = runCli(['--version']);
12
12
  assert.equal(r.status, 0);
13
- assert.equal(r.stdout.trim(), PKG_VERSION);
13
+ // Branded line: "Gipity v1.2.3"
14
+ assert.match(r.stdout, new RegExp(`Gipity\\s+v${PKG_VERSION.replace(/\./g, '\\.')}`));
15
+ // Auth status: logged-in, session expired, or never logged in.
16
+ assert.match(r.stdout, /Logged in as |Session expired for |Not logged in\. Run: gipity login/);
14
17
  });
15
18
  it('--help shows version banner near the top and grouped sections in order', () => {
16
19
  const r = runCli(['--help']);
17
20
  assert.equal(r.status, 0);
18
21
  const out = r.stdout;
19
22
  assert.match(out, new RegExp(`Gipity CLI\\s+v${PKG_VERSION.replace(/\./g, '\\.')}`));
23
+ // Cross-agent positioning line surfaces in top-level help.
24
+ assert.match(out, /no MCP server needed/);
20
25
  const sections = ['Common:', 'Connect:', 'Project:', 'Files:', 'App building:', 'Utilities:', 'Agent:', 'Setup:'];
21
26
  let lastIdx = -1;
22
27
  for (const s of sections) {
@@ -1 +1 @@
1
- {"version":3,"file":"cli-smoke.test.js","sourceRoot":"","sources":["../../src/__tests__/cli-smoke.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli-smoke.test.js","sourceRoot":"","sources":["../../src/__tests__/cli-smoke.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Unit tests for the relay machine-id fingerprint. The native-id paths
3
+ * (Linux/macOS/Windows) are environment-specific; these cover the public
4
+ * guarantees: a uniform 64-char hex output, determinism, and that the
5
+ * GIPITY_RELAY_MACHINE_ID override drives the value (the path hosted
6
+ * relay-host containers rely on).
7
+ */
8
+ import { describe, it, afterEach } from 'node:test';
9
+ import assert from 'node:assert/strict';
10
+ import { getMachineId } from '../relay/machine-id.js';
11
+ const ORIG = process.env.GIPITY_RELAY_MACHINE_ID;
12
+ describe('getMachineId', () => {
13
+ afterEach(() => {
14
+ if (ORIG === undefined)
15
+ delete process.env.GIPITY_RELAY_MACHINE_ID;
16
+ else
17
+ process.env.GIPITY_RELAY_MACHINE_ID = ORIG;
18
+ });
19
+ it('returns a uniform 64-char lowercase hex string', () => {
20
+ assert.match(getMachineId(), /^[0-9a-f]{64}$/);
21
+ });
22
+ it('is deterministic for a fixed override', () => {
23
+ process.env.GIPITY_RELAY_MACHINE_ID = 'relay-host:alice@example.com';
24
+ const a = getMachineId();
25
+ const b = getMachineId();
26
+ assert.equal(a, b);
27
+ assert.match(a, /^[0-9a-f]{64}$/);
28
+ });
29
+ it('different overrides produce different ids', () => {
30
+ process.env.GIPITY_RELAY_MACHINE_ID = 'relay-host:alice@example.com';
31
+ const alice = getMachineId();
32
+ process.env.GIPITY_RELAY_MACHINE_ID = 'relay-host:bob@example.com';
33
+ const bob = getMachineId();
34
+ assert.notEqual(alice, bob);
35
+ });
36
+ it('an empty override is ignored (falls through to a real id)', () => {
37
+ process.env.GIPITY_RELAY_MACHINE_ID = ' ';
38
+ assert.match(getMachineId(), /^[0-9a-f]{64}$/);
39
+ });
40
+ });
41
+ //# sourceMappingURL=relay-machine-id.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relay-machine-id.test.js","sourceRoot":"","sources":["../../src/__tests__/relay-machine-id.test.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAEtD,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC;AAEjD,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,IAAI,KAAK,SAAS;YAAE,OAAO,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC;;YAC9D,OAAO,CAAC,GAAG,CAAC,uBAAuB,GAAG,IAAI,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE,EAAE,gBAAgB,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,OAAO,CAAC,GAAG,CAAC,uBAAuB,GAAG,8BAA8B,CAAC;QACrE,MAAM,CAAC,GAAG,YAAY,EAAE,CAAC;QACzB,MAAM,CAAC,GAAG,YAAY,EAAE,CAAC;QACzB,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACnB,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,OAAO,CAAC,GAAG,CAAC,uBAAuB,GAAG,8BAA8B,CAAC;QACrE,MAAM,KAAK,GAAG,YAAY,EAAE,CAAC;QAC7B,OAAO,CAAC,GAAG,CAAC,uBAAuB,GAAG,4BAA4B,CAAC;QACnE,MAAM,GAAG,GAAG,YAAY,EAAE,CAAC;QAC3B,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2DAA2D,EAAE,GAAG,EAAE;QACnE,OAAO,CAAC,GAAG,CAAC,uBAAuB,GAAG,KAAK,CAAC;QAC5C,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE,EAAE,gBAAgB,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,78 @@
1
+ /**
2
+ * Unit tests for the relay secret-redaction pass. No daemon, no network -
3
+ * just `normalizeSecrets` and `redactEntries`. Uses node's built-in runner.
4
+ */
5
+ import { describe, it } from 'node:test';
6
+ import assert from 'node:assert/strict';
7
+ import { normalizeSecrets, redactEntries, REDACTION_MARKER } from '../relay/redact.js';
8
+ // A realistic-length fake credential and a short one (must NOT be treated
9
+ // as a secret - see MIN_SECRET_LEN guard).
10
+ const OAUTH = 'sk-ant-oat01-AAAAAAAAAAAAAAAAAAAAAAAAAAAA';
11
+ const API_KEY = 'sk-ant-api03-BBBBBBBBBBBBBBBBBBBBBBBBBBBB';
12
+ const SHORT = 'abc';
13
+ describe('normalizeSecrets', () => {
14
+ it('drops empty, nullish, and too-short values', () => {
15
+ assert.deepEqual(normalizeSecrets([undefined, null, '', SHORT]), []);
16
+ });
17
+ it('dedups and sorts longest-first', () => {
18
+ const longer = API_KEY + 'XXXX';
19
+ const out = normalizeSecrets([API_KEY, longer, API_KEY]);
20
+ assert.deepEqual(out, [longer, API_KEY]);
21
+ });
22
+ });
23
+ describe('redactEntries', () => {
24
+ it('scrubs a secret out of a tool_result content string', () => {
25
+ const entries = [
26
+ { kind: 'tool_result', tool_use_id: 't1', content: `the token is ${OAUTH} ok` },
27
+ ];
28
+ const [out] = redactEntries(entries, normalizeSecrets([OAUTH]));
29
+ assert.equal(out.content, `the token is ${REDACTION_MARKER} ok`);
30
+ });
31
+ it('scrubs a secret out of assistant text and nested blocks', () => {
32
+ const entries = [
33
+ {
34
+ kind: 'assistant',
35
+ text: `here it is: ${API_KEY}`,
36
+ blocks: [{ type: 'text', text: `again ${API_KEY}` }],
37
+ },
38
+ ];
39
+ const [out] = redactEntries(entries, normalizeSecrets([API_KEY]));
40
+ assert.equal(out.text, `here it is: ${REDACTION_MARKER}`);
41
+ assert.equal(out.blocks[0].text, `again ${REDACTION_MARKER}`);
42
+ });
43
+ it('handles either credential env value (oauth or api key)', () => {
44
+ const entries = [
45
+ { kind: 'system', content: `oauth=${OAUTH} apikey=${API_KEY}` },
46
+ ];
47
+ const [out] = redactEntries(entries, normalizeSecrets([OAUTH, API_KEY]));
48
+ assert.equal(out.content, `oauth=${REDACTION_MARKER} apikey=${REDACTION_MARKER}`);
49
+ });
50
+ it('leaves a clean entry untouched', () => {
51
+ const entries = [{ kind: 'prompt', prompt: 'build me a todo app' }];
52
+ const [out] = redactEntries(entries, normalizeSecrets([OAUTH]));
53
+ assert.equal(out.prompt, 'build me a todo app');
54
+ });
55
+ it('leaves clean content intact when there are no secrets', () => {
56
+ const entries = [{ kind: 'prompt', prompt: `mentions ${SHORT}` }];
57
+ const [out] = redactEntries(entries, normalizeSecrets([SHORT, '']));
58
+ assert.equal(out.prompt, `mentions ${SHORT}`);
59
+ });
60
+ it('redacts a JWT-shaped string even with no literal secrets', () => {
61
+ // Gipity access/refresh tokens are JWTs and rotate; the pattern pass
62
+ // catches them if the literal-secret list is momentarily stale.
63
+ const jwt = 'eyJhbGciOiJIUzI1NiJ9.eyJ1c2VySWQiOjQyfQ.s1gnatur3_AbC-dEf';
64
+ const entries = [
65
+ { kind: 'tool_result', tool_use_id: 't1', content: `"accessToken":"${jwt}"` },
66
+ ];
67
+ const [out] = redactEntries(entries, []);
68
+ assert.equal(out.content, `"accessToken":"${REDACTION_MARKER}"`);
69
+ });
70
+ it('does not mutate the input entries', () => {
71
+ const entries = [
72
+ { kind: 'tool_result', tool_use_id: 't1', content: OAUTH },
73
+ ];
74
+ redactEntries(entries, normalizeSecrets([OAUTH]));
75
+ assert.equal(entries[0].content, OAUTH);
76
+ });
77
+ });
78
+ //# sourceMappingURL=relay-redact.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relay-redact.test.js","sourceRoot":"","sources":["../../src/__tests__/relay-redact.test.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAGvF,0EAA0E;AAC1E,2CAA2C;AAC3C,MAAM,KAAK,GAAG,2CAA2C,CAAC;AAC1D,MAAM,OAAO,GAAG,2CAA2C,CAAC;AAC5D,MAAM,KAAK,GAAG,KAAK,CAAC;AAEpB,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,MAAM,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,MAAM,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;QAChC,MAAM,GAAG,GAAG,gBAAgB,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;QACzD,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;QAC7D,MAAM,OAAO,GAAkB;YAC7B,EAAE,IAAI,EAAE,aAAa,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,gBAAgB,KAAK,KAAK,EAAE;SAChF,CAAC;QACF,MAAM,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAChE,MAAM,CAAC,KAAK,CAAE,GAAW,CAAC,OAAO,EAAE,gBAAgB,gBAAgB,KAAK,CAAC,CAAC;IAC5E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;QACjE,MAAM,OAAO,GAAkB;YAC7B;gBACE,IAAI,EAAE,WAAW;gBACjB,IAAI,EAAE,eAAe,OAAO,EAAE;gBAC9B,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,OAAO,EAAE,EAAE,CAAC;aACrD;SACF,CAAC;QACF,MAAM,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAClE,MAAM,CAAC,KAAK,CAAE,GAAW,CAAC,IAAI,EAAE,eAAe,gBAAgB,EAAE,CAAC,CAAC;QACnE,MAAM,CAAC,KAAK,CAAE,GAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,SAAS,gBAAgB,EAAE,CAAC,CAAC;IACzE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;QAChE,MAAM,OAAO,GAAkB;YAC7B,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,KAAK,WAAW,OAAO,EAAE,EAAE;SAChE,CAAC;QACF,MAAM,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;QACzE,MAAM,CAAC,KAAK,CAAE,GAAW,CAAC,OAAO,EAAE,SAAS,gBAAgB,WAAW,gBAAgB,EAAE,CAAC,CAAC;IAC7F,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,MAAM,OAAO,GAAkB,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,qBAAqB,EAAE,CAAC,CAAC;QACnF,MAAM,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAChE,MAAM,CAAC,KAAK,CAAE,GAAW,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;QAC/D,MAAM,OAAO,GAAkB,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,KAAK,EAAE,EAAE,CAAC,CAAC;QACjF,MAAM,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;QACpE,MAAM,CAAC,KAAK,CAAE,GAAW,CAAC,MAAM,EAAE,YAAY,KAAK,EAAE,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0DAA0D,EAAE,GAAG,EAAE;QAClE,qEAAqE;QACrE,gEAAgE;QAChE,MAAM,GAAG,GAAG,2DAA2D,CAAC;QACxE,MAAM,OAAO,GAAkB;YAC7B,EAAE,IAAI,EAAE,aAAa,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,kBAAkB,GAAG,GAAG,EAAE;SAC9E,CAAC;QACF,MAAM,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QACzC,MAAM,CAAC,KAAK,CAAE,GAAW,CAAC,OAAO,EAAE,kBAAkB,gBAAgB,GAAG,CAAC,CAAC;IAC5E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,MAAM,OAAO,GAAkB;YAC7B,EAAE,IAAI,EAAE,aAAa,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE;SAC3D,CAAC;QACF,aAAa,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAClD,MAAM,CAAC,KAAK,CAAE,OAAO,CAAC,CAAC,CAAS,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,65 @@
1
+ /**
2
+ * applySkillsBlock - the managed CLAUDE.md / AGENTS.md integration block.
3
+ *
4
+ * The Gipity block is delimited by stable markers and fully managed: every
5
+ * run refreshes it to the current SKILLS_CONTENT while preserving the user's
6
+ * own content outside the markers. These cover the four input shapes plus
7
+ * idempotency - the property that makes per-session refresh safe.
8
+ */
9
+ import { test } from 'node:test';
10
+ import assert from 'node:assert/strict';
11
+ import { applySkillsBlock, GIPITY_BLOCK_BEGIN, GIPITY_BLOCK_END, SKILLS_CONTENT } from '../setup.js';
12
+ function count(haystack, needle) {
13
+ return haystack.split(needle).length - 1;
14
+ }
15
+ test('no file: returns the managed block, marker-wrapped and newline-terminated', () => {
16
+ const out = applySkillsBlock(null);
17
+ assert.ok(out.includes(GIPITY_BLOCK_BEGIN), 'has begin marker');
18
+ assert.ok(out.includes(GIPITY_BLOCK_END), 'has end marker');
19
+ assert.ok(out.includes(SKILLS_CONTENT), 'has current skills content');
20
+ assert.ok(out.endsWith('\n'), 'ends with a newline');
21
+ });
22
+ test('marked block: content refreshed in place, surrounding text preserved', () => {
23
+ const stale = `${GIPITY_BLOCK_BEGIN}\n# Gipity Integration\n\nSTALE OLD TEXT\n${GIPITY_BLOCK_END}`;
24
+ const file = `# My Project\n\nMy own notes.\n\n${stale}\n\nNotes below the block.\n`;
25
+ const out = applySkillsBlock(file);
26
+ assert.ok(out.includes('My own notes.'), 'preserves content above the block');
27
+ assert.ok(out.includes('Notes below the block.'), 'preserves content below the block');
28
+ assert.ok(!out.includes('STALE OLD TEXT'), 'stale block content is replaced');
29
+ assert.ok(out.includes(SKILLS_CONTENT), 'has current skills content');
30
+ assert.equal(count(out, GIPITY_BLOCK_BEGIN), 1, 'exactly one block, no duplication');
31
+ });
32
+ test('legacy unmarked block: migrated to a marked block, stale text dropped', () => {
33
+ const file = '# Gipity Integration\n\nOLD UNMARKED CONTENT from a previous CLI version.\n';
34
+ const out = applySkillsBlock(file);
35
+ assert.ok(out.includes(GIPITY_BLOCK_BEGIN), 'now wrapped in markers');
36
+ assert.ok(!out.includes('OLD UNMARKED CONTENT'), 'legacy text dropped');
37
+ assert.ok(out.includes(SKILLS_CONTENT), 'has current skills content');
38
+ assert.equal(count(out, GIPITY_BLOCK_BEGIN), 1, 'exactly one block');
39
+ });
40
+ test('legacy unmarked block below user content: user content survives migration', () => {
41
+ const file = '# My Project\n\nImportant project notes.\n\n# Gipity Integration\n\nstale legacy text\n';
42
+ const out = applySkillsBlock(file);
43
+ assert.ok(out.includes('Important project notes.'), 'user content above is kept');
44
+ assert.ok(!out.includes('stale legacy text'), 'legacy block is replaced');
45
+ assert.equal(count(out, GIPITY_BLOCK_BEGIN), 1, 'exactly one block');
46
+ });
47
+ test('user file with no Gipity block: block appended, user content kept', () => {
48
+ const file = '# My Project\n\nJust my notes, no Gipity block.\n';
49
+ const out = applySkillsBlock(file);
50
+ assert.ok(out.startsWith('# My Project'), 'user content stays at the top');
51
+ assert.ok(out.includes('Just my notes, no Gipity block.'), 'user content kept');
52
+ assert.ok(out.includes(GIPITY_BLOCK_BEGIN), 'managed block appended');
53
+ });
54
+ test('idempotent: re-applying the result changes nothing', () => {
55
+ const inputs = [
56
+ null,
57
+ '# My Project\n\nNotes.\n',
58
+ '# Gipity Integration\n\nlegacy text\n',
59
+ ];
60
+ for (const input of inputs) {
61
+ const once = applySkillsBlock(input);
62
+ assert.equal(applySkillsBlock(once), once, 'a second apply is a no-op');
63
+ }
64
+ });
65
+ //# sourceMappingURL=setup-skills-block.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup-skills-block.test.js","sourceRoot":"","sources":["../../src/__tests__/setup-skills-block.test.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { SUPPORTED_TOOLS } from './setup.js';
1
2
  export interface ProjectData {
2
3
  short_guid: string;
3
4
  name: string;
@@ -56,6 +57,8 @@ export declare function adoptCurrentDir(opts: {
56
57
  confirmDeletions: boolean;
57
58
  /** Force a specific agent guid; skip the auto-lookup. */
58
59
  agentOverride?: string;
60
+ /** Subset of AI-tool primers to write. Defaults to all. */
61
+ tools?: typeof SUPPORTED_TOOLS;
59
62
  }): Promise<AdoptResult>;
60
63
  /** Re-export so callers can unify on these constants for messaging. */
61
64
  export declare const ADOPT_THRESHOLDS: {
package/dist/adopt-cwd.js CHANGED
@@ -245,6 +245,7 @@ export async function adoptCurrentDir(opts) {
245
245
  agentGuid,
246
246
  sync: 'strict',
247
247
  interactive: opts.confirmDeletions,
248
+ tools: opts.tools,
248
249
  });
249
250
  return { project, isNew, agentGuid, accountSlug: opts.accountSlug, applied };
250
251
  }
@@ -1 +1 @@
1
- {"version":3,"file":"adopt-cwd.js","sourceRoot":"","sources":["../src/adopt-cwd.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"adopt-cwd.js","sourceRoot":"","sources":["../src/adopt-cwd.ts"],"names":[],"mappings":"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"}
package/dist/auth.d.ts CHANGED
@@ -5,6 +5,11 @@ export interface AuthData {
5
5
  expiresAt: string;
6
6
  }
7
7
  export declare function getAuth(): AuthData | null;
8
+ /** Read auth.json directly from disk, bypassing the in-process cache.
9
+ * The relay daemon's secret-redaction needs the *current* tokens: a child
10
+ * `gipity sync` / `gipity claude` process can refresh and rewrite the file
11
+ * mid-run, after which the daemon's cached `getAuth()` would be stale. */
12
+ export declare function readAuthFresh(): AuthData | null;
8
13
  export declare function saveAuth(data: AuthData): void;
9
14
  export declare function clearAuth(): void;
10
15
  export declare function isExpired(): boolean;
package/dist/auth.js CHANGED
@@ -18,6 +18,20 @@ export function getAuth() {
18
18
  return null;
19
19
  }
20
20
  }
21
+ /** Read auth.json directly from disk, bypassing the in-process cache.
22
+ * The relay daemon's secret-redaction needs the *current* tokens: a child
23
+ * `gipity sync` / `gipity claude` process can refresh and rewrite the file
24
+ * mid-run, after which the daemon's cached `getAuth()` would be stale. */
25
+ export function readAuthFresh() {
26
+ if (!existsSync(AUTH_FILE))
27
+ return null;
28
+ try {
29
+ return JSON.parse(readFileSync(AUTH_FILE, 'utf-8'));
30
+ }
31
+ catch {
32
+ return null;
33
+ }
34
+ }
21
35
  export function saveAuth(data) {
22
36
  mkdirSync(AUTH_DIR, { recursive: true });
23
37
  writeFileSync(AUTH_FILE, JSON.stringify(data, null, 2));
package/dist/auth.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"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"}
@@ -11,9 +11,12 @@ import { run } from '../helpers/index.js';
11
11
  // Templates scaffold a whole app (blank wiring or a working starter demo).
12
12
  // Kits are reusable building blocks added into an existing app's src/packages/.
13
13
  const TEMPLATES = ['web-simple', '3d-engine'];
14
- const STARTERS = ['web-fullstack', '2d-game', '3d-world', 'api'];
14
+ const STARTERS = ['web-fullstack', 'web-vision-cam', '2d-game', '3d-world', 'api'];
15
15
  const HIDDEN = [{ key: 'app-itsm', hint: 'IT service management / helpdesk / ticketing' }];
16
- const KITS = [{ key: 'realtime', hint: 'multiplayer / presence / shared state' }];
16
+ const KITS = [
17
+ { key: 'realtime', hint: 'multiplayer / presence / shared state' },
18
+ { key: 'web-vision-mediapipe', hint: 'browser camera vision - gesture, pose, object detection' },
19
+ ];
17
20
  function printCatalog() {
18
21
  console.log('');
19
22
  console.log(`${bold('Templates')} ${muted('- scaffold a whole app into an empty project')}`);
@@ -66,6 +69,14 @@ export const addCommand = new Command('add')
66
69
  for (const n of data.notes)
67
70
  console.log(n);
68
71
  }
72
+ // After scaffolding an app, point at kits as the next step - they add
73
+ // features (multiplayer, etc.) into the app you just created.
74
+ if (data.kind !== 'kit' && KITS.length > 0) {
75
+ console.log('');
76
+ console.log(muted('Add features with kits (gipity add <kit>):'));
77
+ for (const k of KITS)
78
+ console.log(muted(` ${k.key} - ${k.hint}`));
79
+ }
69
80
  if (syncResult.applied > 0) {
70
81
  console.log(`\nPulled ${syncResult.applied} files to local.`);
71
82
  }
@@ -1 +1 @@
1
- {"version":3,"file":"add.js","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"add.js","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,16 @@
1
1
  import { Command } from 'commander';
2
+ /** Pre-accept Claude Code's per-directory workspace-trust dialog for a
3
+ * Gipity-managed project directory. `gipity claude` only ever launches the
4
+ * agent in a project the user created or explicitly chose, so the dialog is
5
+ * pure friction here - and a fresh `project-NNN` dir is untrusted on every
6
+ * interactive run.
7
+ *
8
+ * Writes `projects["<dir>"].hasTrustDialogAccepted = true` into
9
+ * `~/.claude.json` - the exact entry Claude records when the user clicks
10
+ * "Yes". Purely additive (a path Claude hadn't seen); every other key is
11
+ * preserved, and the write is atomic (temp + rename) so a crash can't
12
+ * truncate the file. Best-effort: a malformed or unreadable config is left
13
+ * untouched and never blocks the launch. Headless `-p` runs skip the dialog
14
+ * already, so this is only needed for interactive launches. */
15
+ export declare function markFolderTrusted(dir: string): void;
2
16
  export declare const claudeCommand: Command;
@@ -1,6 +1,6 @@
1
1
  import { Command } from 'commander';
2
2
  import { join, dirname, resolve, basename } from 'path';
3
- import { existsSync, mkdirSync, readFileSync, readdirSync, statSync } from 'fs';
3
+ import { existsSync, mkdirSync, readFileSync, writeFileSync, renameSync, readdirSync, statSync } from 'fs';
4
4
  import { execSync, spawn } from 'child_process';
5
5
  import { homedir } from 'os';
6
6
  import { fileURLToPath } from 'url';
@@ -150,6 +150,44 @@ function formatElapsed(ms) {
150
150
  const pad2 = (n) => String(n).padStart(2, '0');
151
151
  return `${pad2(h)}:${pad2(m)}:${s.toFixed(1).padStart(4, '0')}`;
152
152
  }
153
+ /** Pre-accept Claude Code's per-directory workspace-trust dialog for a
154
+ * Gipity-managed project directory. `gipity claude` only ever launches the
155
+ * agent in a project the user created or explicitly chose, so the dialog is
156
+ * pure friction here - and a fresh `project-NNN` dir is untrusted on every
157
+ * interactive run.
158
+ *
159
+ * Writes `projects["<dir>"].hasTrustDialogAccepted = true` into
160
+ * `~/.claude.json` - the exact entry Claude records when the user clicks
161
+ * "Yes". Purely additive (a path Claude hadn't seen); every other key is
162
+ * preserved, and the write is atomic (temp + rename) so a crash can't
163
+ * truncate the file. Best-effort: a malformed or unreadable config is left
164
+ * untouched and never blocks the launch. Headless `-p` runs skip the dialog
165
+ * already, so this is only needed for interactive launches. */
166
+ export function markFolderTrusted(dir) {
167
+ try {
168
+ const file = join(homedir(), '.claude.json');
169
+ const cfg = existsSync(file)
170
+ ? JSON.parse(readFileSync(file, 'utf-8'))
171
+ : {};
172
+ if (typeof cfg !== 'object' || cfg === null)
173
+ return;
174
+ if (typeof cfg.projects !== 'object' || cfg.projects === null)
175
+ cfg.projects = {};
176
+ const entry = typeof cfg.projects[dir] === 'object' && cfg.projects[dir] !== null
177
+ ? cfg.projects[dir]
178
+ : {};
179
+ if (entry.hasTrustDialogAccepted === true)
180
+ return; // already trusted - no write
181
+ entry.hasTrustDialogAccepted = true;
182
+ cfg.projects[dir] = entry;
183
+ const tmp = `${file}.gipity-tmp`;
184
+ writeFileSync(tmp, JSON.stringify(cfg, null, 2));
185
+ renameSync(tmp, file);
186
+ }
187
+ catch {
188
+ // A config-file hiccup must never block launching the agent.
189
+ }
190
+ }
153
191
  function suggestProjectName(existingSlugs) {
154
192
  // Canonical format: `project-NNN` (3-digit, zero-padded, hyphenated).
155
193
  // Same shape the web "+ New Project" button uses, so both entry points
@@ -782,6 +820,12 @@ export const claudeCommand = new Command('claude')
782
820
  else if (convGuidForHooks) {
783
821
  childEnv.GIPITY_CONVERSATION_GUID = convGuidForHooks;
784
822
  }
823
+ // A Gipity project directory is trusted by construction - the user
824
+ // created or explicitly chose it. Pre-accept Claude's per-directory
825
+ // trust dialog so an interactive launch doesn't stop to ask. Headless
826
+ // `-p` runs skip the dialog already, so this is only needed interactively.
827
+ if (!nonInteractive)
828
+ markFolderTrusted(process.cwd());
785
829
  const child = spawn(claudeCmd, allArgs, {
786
830
  stdio: 'inherit',
787
831
  cwd: process.cwd(),