@intutic/cli 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 (98) hide show
  1. package/README.md +107 -0
  2. package/dist/cli.d.ts +14 -0
  3. package/dist/cli.d.ts.map +1 -0
  4. package/dist/cli.js +92 -0
  5. package/dist/cli.js.map +1 -0
  6. package/dist/commands/connect.d.ts +18 -0
  7. package/dist/commands/connect.d.ts.map +1 -0
  8. package/dist/commands/connect.js +154 -0
  9. package/dist/commands/connect.js.map +1 -0
  10. package/dist/commands/init.d.ts +13 -0
  11. package/dist/commands/init.d.ts.map +1 -0
  12. package/dist/commands/init.js +84 -0
  13. package/dist/commands/init.js.map +1 -0
  14. package/dist/commands/login.d.ts +14 -0
  15. package/dist/commands/login.d.ts.map +1 -0
  16. package/dist/commands/login.js +121 -0
  17. package/dist/commands/login.js.map +1 -0
  18. package/dist/commands/logout.d.ts +8 -0
  19. package/dist/commands/logout.d.ts.map +1 -0
  20. package/dist/commands/logout.js +13 -0
  21. package/dist/commands/logout.js.map +1 -0
  22. package/dist/commands/status.d.ts +11 -0
  23. package/dist/commands/status.d.ts.map +1 -0
  24. package/dist/commands/status.js +55 -0
  25. package/dist/commands/status.js.map +1 -0
  26. package/dist/commands/traces.d.ts +32 -0
  27. package/dist/commands/traces.d.ts.map +1 -0
  28. package/dist/commands/traces.js +207 -0
  29. package/dist/commands/traces.js.map +1 -0
  30. package/dist/commands/whoami.d.ts +12 -0
  31. package/dist/commands/whoami.d.ts.map +1 -0
  32. package/dist/commands/whoami.js +34 -0
  33. package/dist/commands/whoami.js.map +1 -0
  34. package/dist/config/paths.d.ts +30 -0
  35. package/dist/config/paths.d.ts.map +1 -0
  36. package/dist/config/paths.js +53 -0
  37. package/dist/config/paths.js.map +1 -0
  38. package/dist/config/store.d.ts +25 -0
  39. package/dist/config/store.d.ts.map +1 -0
  40. package/dist/config/store.js +69 -0
  41. package/dist/config/store.js.map +1 -0
  42. package/dist/harness/aider.d.ts +12 -0
  43. package/dist/harness/aider.d.ts.map +1 -0
  44. package/dist/harness/aider.js +62 -0
  45. package/dist/harness/aider.js.map +1 -0
  46. package/dist/harness/antigravity.d.ts +12 -0
  47. package/dist/harness/antigravity.d.ts.map +1 -0
  48. package/dist/harness/antigravity.js +69 -0
  49. package/dist/harness/antigravity.js.map +1 -0
  50. package/dist/harness/base.d.ts +20 -0
  51. package/dist/harness/base.d.ts.map +1 -0
  52. package/dist/harness/base.js +73 -0
  53. package/dist/harness/base.js.map +1 -0
  54. package/dist/harness/claudeCode.d.ts +2 -0
  55. package/dist/harness/claudeCode.d.ts.map +1 -0
  56. package/dist/harness/claudeCode.js +9 -0
  57. package/dist/harness/claudeCode.js.map +1 -0
  58. package/dist/harness/codex.d.ts +13 -0
  59. package/dist/harness/codex.d.ts.map +1 -0
  60. package/dist/harness/codex.js +74 -0
  61. package/dist/harness/codex.js.map +1 -0
  62. package/dist/harness/cursor.d.ts +2 -0
  63. package/dist/harness/cursor.d.ts.map +1 -0
  64. package/dist/harness/cursor.js +9 -0
  65. package/dist/harness/cursor.js.map +1 -0
  66. package/dist/harness/detector.d.ts +29 -0
  67. package/dist/harness/detector.d.ts.map +1 -0
  68. package/dist/harness/detector.js +61 -0
  69. package/dist/harness/detector.js.map +1 -0
  70. package/dist/harness/n8n.d.ts +13 -0
  71. package/dist/harness/n8n.d.ts.map +1 -0
  72. package/dist/harness/n8n.js +30 -0
  73. package/dist/harness/n8n.js.map +1 -0
  74. package/dist/harness/openhands.d.ts +12 -0
  75. package/dist/harness/openhands.d.ts.map +1 -0
  76. package/dist/harness/openhands.js +63 -0
  77. package/dist/harness/openhands.js.map +1 -0
  78. package/dist/harness/types.d.ts +30 -0
  79. package/dist/harness/types.d.ts.map +1 -0
  80. package/dist/harness/types.js +25 -0
  81. package/dist/harness/types.js.map +1 -0
  82. package/dist/harness/windsurf.d.ts +2 -0
  83. package/dist/harness/windsurf.d.ts.map +1 -0
  84. package/dist/harness/windsurf.js +9 -0
  85. package/dist/harness/windsurf.js.map +1 -0
  86. package/dist/lib/api.d.ts +44 -0
  87. package/dist/lib/api.d.ts.map +1 -0
  88. package/dist/lib/api.js +55 -0
  89. package/dist/lib/api.js.map +1 -0
  90. package/dist/lib/hash.d.ts +11 -0
  91. package/dist/lib/hash.d.ts.map +1 -0
  92. package/dist/lib/hash.js +18 -0
  93. package/dist/lib/hash.js.map +1 -0
  94. package/dist/lib/logger.d.ts +18 -0
  95. package/dist/lib/logger.d.ts.map +1 -0
  96. package/dist/lib/logger.js +33 -0
  97. package/dist/lib/logger.js.map +1 -0
  98. package/package.json +31 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openhands.js","sourceRoot":"","sources":["../../src/harness/openhands.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACzC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AAGnD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEpC,MAAM,WAAW,GAAG,aAAa,CAAA;AAEjC,MAAM,CAAC,MAAM,gBAAgB,GAAoB;IAC/C,IAAI,EAAE,WAAW,CAAC,SAAS;IAC3B,cAAc,EAAE,WAAW;IAE3B,KAAK,CAAC,MAAM,CAAC,aAAqB;QAChC,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC,CAAA;YAC9C,OAAO,IAAI,CAAA;QACb,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAA;QACd,CAAC;IACH,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,aAAqB,EAAE,IAAoB,EAAE,QAAgB;QAC7E,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAA;QAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,CAAA;QACjD,MAAM,OAAO,GAAG,QAAQ,GAAG,cAAc,CAAA;QAEzC,MAAM,YAAY,GAAG,IAAI;aACtB,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,GAAG,CAAC,KAAK,OAAO,GAAG,CAAC,OAAO,EAAE,CAAC;aACjD,IAAI,CAAC,aAAa,CAAC,CAAA;QAEtB,yDAAyD;QACzD,MAAM,IAAI,GAAG;YACX,6CAA6C;YAC7C,gDAAgD;YAChD,gBAAgB,MAAM,EAAE,EAAE;YAC1B,EAAE;YACF,WAAW;YACX,gBAAgB,QAAQ,GAAG;YAC3B,oBAAoB;YACpB,YAAY;YACZ,KAAK;YACL,EAAE;SACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAEZ,MAAM,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QACnD,MAAM,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAA;QACvC,MAAM,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;QAC/B,OAAO,QAAQ,CAAA;IACjB,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,aAAqB;QACzC,IAAI,CAAC;YACH,OAAO,MAAM,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC,CAAA;QACzD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAA;QACb,CAAC;IACH,CAAC;CACF,CAAA"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Harness adapter interface — contract for all harness integrations.
3
+ *
4
+ * Each adapter knows how to detect its harness, write governance
5
+ * config to its native config file, and read the current file hash.
6
+ *
7
+ * HLD §3.14 — Harness Onboarding Matrix
8
+ * LLD #8 — Sync Daemon / CLI
9
+ * @module
10
+ */
11
+ import type { HarnessType, SyncSopEntry } from '@intutic/shared-types';
12
+ /** Contract implemented by each harness adapter. */
13
+ export interface IHarnessAdapter {
14
+ /** Harness type identifier. */
15
+ readonly type: HarnessType;
16
+ /** Config file name relative to workspace root. */
17
+ readonly configFileName: string;
18
+ /** Detect whether this harness is present in the workspace. */
19
+ detect(workspaceRoot: string): Promise<boolean>;
20
+ /**
21
+ * Write governance config to the harness's native config file.
22
+ * Returns the absolute path written, or null if skipped.
23
+ */
24
+ writeConfig(workspaceRoot: string, sops: SyncSopEntry[], proxyUrl: string): Promise<string | null>;
25
+ /** Read SHA-256 hash of current config file content. Returns null if file doesn't exist. */
26
+ readCurrentHash(workspaceRoot: string): Promise<string | null>;
27
+ }
28
+ /** Harness config file mapping for file-based harnesses. */
29
+ export declare const HARNESS_CONFIG_FILES: Record<HarnessType, string>;
30
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/harness/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAEtE,oDAAoD;AACpD,MAAM,WAAW,eAAe;IAC9B,+BAA+B;IAC/B,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAA;IAC1B,mDAAmD;IACnD,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;IAC/B,+DAA+D;IAC/D,MAAM,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IAC/C;;;OAGG;IACH,WAAW,CAAC,aAAa,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;IAClG,4FAA4F;IAC5F,eAAe,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;CAC/D;AAED,4DAA4D;AAC5D,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAY5D,CAAA"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Harness adapter interface — contract for all harness integrations.
3
+ *
4
+ * Each adapter knows how to detect its harness, write governance
5
+ * config to its native config file, and read the current file hash.
6
+ *
7
+ * HLD §3.14 — Harness Onboarding Matrix
8
+ * LLD #8 — Sync Daemon / CLI
9
+ * @module
10
+ */
11
+ /** Harness config file mapping for file-based harnesses. */
12
+ export const HARNESS_CONFIG_FILES = {
13
+ 'cursor': '.cursorrules',
14
+ 'claude-code': 'CLAUDE.md',
15
+ 'antigravity': '.gemini/settings.json',
16
+ 'windsurf': '.windsurfrules',
17
+ 'aider': '.aider.conf.yml',
18
+ 'openhands': 'config.toml',
19
+ 'codex': '.env.intutic',
20
+ 'n8n': '', // Phase 2 — TD-037: API call, not file write
21
+ 'openclaw': '', // Phase 2 — TD-037
22
+ 'hermes': '', // Phase 2 — TD-037
23
+ 'pi': '', // Phase 2 — TD-037
24
+ };
25
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/harness/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAqBH,4DAA4D;AAC5D,MAAM,CAAC,MAAM,oBAAoB,GAAgC;IAC/D,QAAQ,EAAE,cAAc;IACxB,aAAa,EAAE,WAAW;IAC1B,aAAa,EAAE,uBAAuB;IACtC,UAAU,EAAE,gBAAgB;IAC5B,OAAO,EAAE,iBAAiB;IAC1B,WAAW,EAAE,aAAa;IAC1B,OAAO,EAAE,cAAc;IACvB,KAAK,EAAE,EAAE,EAAE,6CAA6C;IACxD,UAAU,EAAE,EAAE,EAAE,mBAAmB;IACnC,QAAQ,EAAE,EAAE,EAAE,mBAAmB;IACjC,IAAI,EAAE,EAAE,EAAE,mBAAmB;CAC9B,CAAA"}
@@ -0,0 +1,2 @@
1
+ export declare const windsurfAdapter: import("./types.js").IHarnessAdapter;
2
+ //# sourceMappingURL=windsurf.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"windsurf.d.ts","sourceRoot":"","sources":["../../src/harness/windsurf.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,eAAe,sCAAgE,CAAA"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Windsurf adapter — .windsurfrules
3
+ * HLD §3.14 — Harness Onboarding Matrix
4
+ * @module
5
+ */
6
+ import { HarnessType } from '@intutic/shared-types';
7
+ import { createMarkdownAdapter } from './base.js';
8
+ export const windsurfAdapter = createMarkdownAdapter(HarnessType.WINDSURF, '.windsurfrules');
9
+ //# sourceMappingURL=windsurf.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"windsurf.js","sourceRoot":"","sources":["../../src/harness/windsurf.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AACnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAA;AAEjD,MAAM,CAAC,MAAM,eAAe,GAAG,qBAAqB,CAAC,WAAW,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAA"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * HTTP client for Intutic control plane API.
3
+ *
4
+ * Uses native fetch() (Node 18+). All requests include
5
+ * Authorization: Bearer <apiKey> header.
6
+ *
7
+ * LLD #8 — Sync Daemon / CLI
8
+ * @module
9
+ */
10
+ import type { SyncConfigPayload, DaemonStatus, SopHashReport } from '@intutic/shared-types';
11
+ /** API client for control plane communication. */
12
+ export interface ApiClient {
13
+ fetchConfig(workspaceId: string): Promise<SyncConfigPayload>;
14
+ reportStatus(status: DaemonStatus): Promise<{
15
+ ack: boolean;
16
+ configVersion: number;
17
+ }>;
18
+ reportHashes(report: SopHashReport): Promise<{
19
+ driftCount: number;
20
+ }>;
21
+ getMe(): Promise<{
22
+ email: string;
23
+ memberId: string;
24
+ workspaceId: string;
25
+ role: string;
26
+ }>;
27
+ login(email: string, password: string): Promise<{
28
+ accessToken: string;
29
+ refreshToken: string;
30
+ workspaceId: string;
31
+ email: string;
32
+ memberId: string;
33
+ }>;
34
+ /** Generic GET request for arbitrary API paths. */
35
+ get<T>(path: string): Promise<T>;
36
+ }
37
+ /**
38
+ * Create an API client bound to a control plane URL and API key.
39
+ *
40
+ * @param controlPlaneUrl - Base URL (e.g., http://localhost:3001 or https://api.intutic.ai)
41
+ * @param apiKey - API key (vk_*) or JWT access token
42
+ */
43
+ export declare function createApiClient(controlPlaneUrl: string, apiKey: string): ApiClient;
44
+ //# sourceMappingURL=api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/lib/api.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EACV,iBAAiB,EACjB,YAAY,EACZ,aAAa,EACd,MAAM,uBAAuB,CAAA;AAE9B,kDAAkD;AAClD,MAAM,WAAW,SAAS;IACxB,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAA;IAC5D,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC;QAAE,GAAG,EAAE,OAAO,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACpF,YAAY,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC;QAAE,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACpE,KAAK,IAAI,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACxF,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACpJ,mDAAmD;IACnD,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;CACjC;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,eAAe,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,CA+ClF"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * HTTP client for Intutic control plane API.
3
+ *
4
+ * Uses native fetch() (Node 18+). All requests include
5
+ * Authorization: Bearer <apiKey> header.
6
+ *
7
+ * LLD #8 — Sync Daemon / CLI
8
+ * @module
9
+ */
10
+ /**
11
+ * Create an API client bound to a control plane URL and API key.
12
+ *
13
+ * @param controlPlaneUrl - Base URL (e.g., http://localhost:3001 or https://api.intutic.ai)
14
+ * @param apiKey - API key (vk_*) or JWT access token
15
+ */
16
+ export function createApiClient(controlPlaneUrl, apiKey) {
17
+ const headers = {
18
+ 'Content-Type': 'application/json',
19
+ 'Authorization': `Bearer ${apiKey}`,
20
+ };
21
+ async function request(method, path, body) {
22
+ const url = `${controlPlaneUrl}${path}`;
23
+ const res = await fetch(url, {
24
+ method,
25
+ headers,
26
+ body: body ? JSON.stringify(body) : undefined,
27
+ });
28
+ if (!res.ok) {
29
+ const text = await res.text().catch(() => 'Unknown error');
30
+ throw new Error(`API ${method} ${path} failed (${res.status}): ${text}`);
31
+ }
32
+ return res.json();
33
+ }
34
+ return {
35
+ async fetchConfig(workspaceId) {
36
+ return request('POST', '/api/v1/sync/config', { workspaceId });
37
+ },
38
+ async reportStatus(status) {
39
+ return request('POST', '/api/v1/sync/status', status);
40
+ },
41
+ async reportHashes(report) {
42
+ return request('POST', '/api/v1/sync/sop-hash', report);
43
+ },
44
+ async getMe() {
45
+ return request('GET', '/api/v1/auth/me');
46
+ },
47
+ async login(email, password) {
48
+ return request('POST', '/api/v1/auth/login', { email, password });
49
+ },
50
+ async get(path) {
51
+ return request('GET', path);
52
+ },
53
+ };
54
+ }
55
+ //# sourceMappingURL=api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/lib/api.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAmBH;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,eAAuB,EAAE,MAAc;IACrE,MAAM,OAAO,GAAG;QACd,cAAc,EAAE,kBAAkB;QAClC,eAAe,EAAE,UAAU,MAAM,EAAE;KACpC,CAAA;IAED,KAAK,UAAU,OAAO,CAAI,MAAc,EAAE,IAAY,EAAE,IAAc;QACpE,MAAM,GAAG,GAAG,GAAG,eAAe,GAAG,IAAI,EAAE,CAAA;QACvC,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAC3B,MAAM;YACN,OAAO;YACP,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;SAC9C,CAAC,CAAA;QAEF,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,CAAA;YAC1D,MAAM,IAAI,KAAK,CAAC,OAAO,MAAM,IAAI,IAAI,YAAY,GAAG,CAAC,MAAM,MAAM,IAAI,EAAE,CAAC,CAAA;QAC1E,CAAC;QAED,OAAO,GAAG,CAAC,IAAI,EAAgB,CAAA;IACjC,CAAC;IAED,OAAO;QACL,KAAK,CAAC,WAAW,CAAC,WAAmB;YACnC,OAAO,OAAO,CAAoB,MAAM,EAAE,qBAAqB,EAAE,EAAE,WAAW,EAAE,CAAC,CAAA;QACnF,CAAC;QAED,KAAK,CAAC,YAAY,CAAC,MAAoB;YACrC,OAAO,OAAO,CAAC,MAAM,EAAE,qBAAqB,EAAE,MAAM,CAAC,CAAA;QACvD,CAAC;QAED,KAAK,CAAC,YAAY,CAAC,MAAqB;YACtC,OAAO,OAAO,CAAC,MAAM,EAAE,uBAAuB,EAAE,MAAM,CAAC,CAAA;QACzD,CAAC;QAED,KAAK,CAAC,KAAK;YACT,OAAO,OAAO,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAA;QAC1C,CAAC;QAED,KAAK,CAAC,KAAK,CAAC,KAAa,EAAE,QAAgB;YACzC,OAAO,OAAO,CAAC,MAAM,EAAE,oBAAoB,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAA;QACnE,CAAC;QAED,KAAK,CAAC,GAAG,CAAI,IAAY;YACvB,OAAO,OAAO,CAAI,KAAK,EAAE,IAAI,CAAC,CAAA;QAChC,CAAC;KACF,CAAA;AACH,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * SHA-256 hashing utilities.
3
+ *
4
+ * LLD #8 — Sync Daemon / CLI
5
+ * @module
6
+ */
7
+ /** Compute SHA-256 hash of a file's contents. Returns hex string. */
8
+ export declare function hashFile(filePath: string): Promise<string>;
9
+ /** Compute SHA-256 hash of a string. Returns hex string. */
10
+ export declare function hashString(content: string): string;
11
+ //# sourceMappingURL=hash.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hash.d.ts","sourceRoot":"","sources":["../../src/lib/hash.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,qEAAqE;AACrE,wBAAsB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAGhE;AAED,4DAA4D;AAC5D,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAElD"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * SHA-256 hashing utilities.
3
+ *
4
+ * LLD #8 — Sync Daemon / CLI
5
+ * @module
6
+ */
7
+ import { createHash } from 'node:crypto';
8
+ import { readFile } from 'node:fs/promises';
9
+ /** Compute SHA-256 hash of a file's contents. Returns hex string. */
10
+ export async function hashFile(filePath) {
11
+ const content = await readFile(filePath);
12
+ return createHash('sha256').update(content).digest('hex');
13
+ }
14
+ /** Compute SHA-256 hash of a string. Returns hex string. */
15
+ export function hashString(content) {
16
+ return createHash('sha256').update(content, 'utf-8').digest('hex');
17
+ }
18
+ //# sourceMappingURL=hash.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hash.js","sourceRoot":"","sources":["../../src/lib/hash.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAE3C,qEAAqE;AACrE,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,QAAgB;IAC7C,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,CAAA;IACxC,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;AAC3D,CAAC;AAED,4DAA4D;AAC5D,MAAM,UAAU,UAAU,CAAC,OAAe;IACxC,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;AACpE,CAAC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Colorized console logger using picocolors.
3
+ *
4
+ * LLD #8 — Sync Daemon / CLI
5
+ * @module
6
+ */
7
+ export declare const log: {
8
+ info(msg: string): void;
9
+ success(msg: string): void;
10
+ warn(msg: string): void;
11
+ error(msg: string): void;
12
+ dim(msg: string): void;
13
+ /** Print a labeled key-value pair. */
14
+ field(label: string, value: string): void;
15
+ /** Print a section header. */
16
+ header(msg: string): void;
17
+ };
18
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/lib/logger.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,eAAO,MAAM,GAAG;cACJ,MAAM,GAAG,IAAI;iBAIV,MAAM,GAAG,IAAI;cAIhB,MAAM,GAAG,IAAI;eAIZ,MAAM,GAAG,IAAI;aAIf,MAAM,GAAG,IAAI;IAItB,sCAAsC;iBACzB,MAAM,SAAS,MAAM,GAAG,IAAI;IAIzC,8BAA8B;gBAClB,MAAM,GAAG,IAAI;CAG1B,CAAA"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Colorized console logger using picocolors.
3
+ *
4
+ * LLD #8 — Sync Daemon / CLI
5
+ * @module
6
+ */
7
+ import pc from 'picocolors';
8
+ export const log = {
9
+ info(msg) {
10
+ console.log(`${pc.blue('ℹ')} ${msg}`);
11
+ },
12
+ success(msg) {
13
+ console.log(`${pc.green('✔')} ${msg}`);
14
+ },
15
+ warn(msg) {
16
+ console.log(`${pc.yellow('⚠')} ${msg}`);
17
+ },
18
+ error(msg) {
19
+ console.error(`${pc.red('✖')} ${msg}`);
20
+ },
21
+ dim(msg) {
22
+ console.log(pc.dim(msg));
23
+ },
24
+ /** Print a labeled key-value pair. */
25
+ field(label, value) {
26
+ console.log(` ${pc.dim(label + ':')} ${value}`);
27
+ },
28
+ /** Print a section header. */
29
+ header(msg) {
30
+ console.log(`\n${pc.bold(pc.cyan(msg))}`);
31
+ },
32
+ };
33
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/lib/logger.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,YAAY,CAAA;AAE3B,MAAM,CAAC,MAAM,GAAG,GAAG;IACjB,IAAI,CAAC,GAAW;QACd,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC,CAAA;IACvC,CAAC;IAED,OAAO,CAAC,GAAW;QACjB,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC,CAAA;IACxC,CAAC;IAED,IAAI,CAAC,GAAW;QACd,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC,CAAA;IACzC,CAAC;IAED,KAAK,CAAC,GAAW;QACf,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC,CAAA;IACxC,CAAC;IAED,GAAG,CAAC,GAAW;QACb,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;IAC1B,CAAC;IAED,sCAAsC;IACtC,KAAK,CAAC,KAAa,EAAE,KAAa;QAChC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,IAAI,KAAK,EAAE,CAAC,CAAA;IAClD,CAAC;IAED,8BAA8B;IAC9B,MAAM,CAAC,GAAW;QAChB,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAA;IAC3C,CAAC;CACF,CAAA"}
package/package.json ADDED
@@ -0,0 +1,31 @@
1
+ {
2
+ "name": "@intutic/cli",
3
+ "version": "0.1.0",
4
+ "description": "Intutic CLI — sync daemon, harness detection, and workspace management",
5
+ "type": "module",
6
+ "bin": { "intutic": "./dist/cli.js" },
7
+ "scripts": {
8
+ "build": "tsc",
9
+ "dev": "tsx src/cli.ts",
10
+ "typecheck": "tsc --noEmit",
11
+ "prepublishOnly": "npm run build"
12
+ },
13
+ "publishConfig": { "access": "public" },
14
+ "files": ["dist/", "README.md"],
15
+ "repository": { "type": "git", "url": "https://github.com/intutic/intutic" },
16
+ "license": "Proprietary",
17
+ "homepage": "https://intutic.ai",
18
+ "keywords": ["ai", "governance", "agent", "sop", "cli"],
19
+ "engines": { "node": ">=18" },
20
+ "dependencies": {
21
+ "@intutic/shared-types": "*",
22
+ "@intutic/id": "*",
23
+ "commander": "^13",
24
+ "picocolors": "^1"
25
+ },
26
+ "devDependencies": {
27
+ "typescript": "^5.5",
28
+ "tsx": "^4",
29
+ "@types/node": "^22"
30
+ }
31
+ }