@sonde/agent 0.0.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 (149) hide show
  1. package/dist/cli/packs.d.ts +23 -0
  2. package/dist/cli/packs.d.ts.map +1 -0
  3. package/dist/cli/packs.js +172 -0
  4. package/dist/cli/packs.js.map +1 -0
  5. package/dist/cli/packs.test.d.ts +2 -0
  6. package/dist/cli/packs.test.d.ts.map +1 -0
  7. package/dist/cli/packs.test.js +171 -0
  8. package/dist/cli/packs.test.js.map +1 -0
  9. package/dist/config.d.ts +18 -0
  10. package/dist/config.d.ts.map +1 -0
  11. package/dist/config.js +38 -0
  12. package/dist/config.js.map +1 -0
  13. package/dist/index.d.ts +13 -0
  14. package/dist/index.d.ts.map +1 -0
  15. package/dist/index.js +191 -0
  16. package/dist/index.js.map +1 -0
  17. package/dist/runtime/attestation.d.ts +9 -0
  18. package/dist/runtime/attestation.d.ts.map +1 -0
  19. package/dist/runtime/attestation.js +32 -0
  20. package/dist/runtime/attestation.js.map +1 -0
  21. package/dist/runtime/attestation.test.d.ts +2 -0
  22. package/dist/runtime/attestation.test.d.ts.map +1 -0
  23. package/dist/runtime/attestation.test.js +59 -0
  24. package/dist/runtime/attestation.test.js.map +1 -0
  25. package/dist/runtime/audit.d.ts +19 -0
  26. package/dist/runtime/audit.d.ts.map +1 -0
  27. package/dist/runtime/audit.js +52 -0
  28. package/dist/runtime/audit.js.map +1 -0
  29. package/dist/runtime/audit.test.d.ts +2 -0
  30. package/dist/runtime/audit.test.d.ts.map +1 -0
  31. package/dist/runtime/audit.test.js +53 -0
  32. package/dist/runtime/audit.test.js.map +1 -0
  33. package/dist/runtime/connection.d.ts +55 -0
  34. package/dist/runtime/connection.d.ts.map +1 -0
  35. package/dist/runtime/connection.js +325 -0
  36. package/dist/runtime/connection.js.map +1 -0
  37. package/dist/runtime/connection.test.d.ts +2 -0
  38. package/dist/runtime/connection.test.d.ts.map +1 -0
  39. package/dist/runtime/connection.test.js +221 -0
  40. package/dist/runtime/connection.test.js.map +1 -0
  41. package/dist/runtime/executor.d.ts +21 -0
  42. package/dist/runtime/executor.d.ts.map +1 -0
  43. package/dist/runtime/executor.js +89 -0
  44. package/dist/runtime/executor.js.map +1 -0
  45. package/dist/runtime/executor.test.d.ts +2 -0
  46. package/dist/runtime/executor.test.d.ts.map +1 -0
  47. package/dist/runtime/executor.test.js +88 -0
  48. package/dist/runtime/executor.test.js.map +1 -0
  49. package/dist/runtime/privilege.d.ts +9 -0
  50. package/dist/runtime/privilege.d.ts.map +1 -0
  51. package/dist/runtime/privilege.js +35 -0
  52. package/dist/runtime/privilege.js.map +1 -0
  53. package/dist/runtime/privilege.test.d.ts +2 -0
  54. package/dist/runtime/privilege.test.d.ts.map +1 -0
  55. package/dist/runtime/privilege.test.js +22 -0
  56. package/dist/runtime/privilege.test.js.map +1 -0
  57. package/dist/runtime/scrubber.d.ts +17 -0
  58. package/dist/runtime/scrubber.d.ts.map +1 -0
  59. package/dist/runtime/scrubber.js +84 -0
  60. package/dist/runtime/scrubber.js.map +1 -0
  61. package/dist/runtime/scrubber.test.d.ts +2 -0
  62. package/dist/runtime/scrubber.test.d.ts.map +1 -0
  63. package/dist/runtime/scrubber.test.js +72 -0
  64. package/dist/runtime/scrubber.test.js.map +1 -0
  65. package/dist/system/scanner.d.ts +32 -0
  66. package/dist/system/scanner.d.ts.map +1 -0
  67. package/dist/system/scanner.js +90 -0
  68. package/dist/system/scanner.js.map +1 -0
  69. package/dist/system/scanner.test.d.ts +2 -0
  70. package/dist/system/scanner.test.d.ts.map +1 -0
  71. package/dist/system/scanner.test.js +121 -0
  72. package/dist/system/scanner.test.js.map +1 -0
  73. package/dist/tui/installer/InstallerApp.d.ts +11 -0
  74. package/dist/tui/installer/InstallerApp.d.ts.map +1 -0
  75. package/dist/tui/installer/InstallerApp.js +32 -0
  76. package/dist/tui/installer/InstallerApp.js.map +1 -0
  77. package/dist/tui/installer/StepComplete.d.ts +9 -0
  78. package/dist/tui/installer/StepComplete.d.ts.map +1 -0
  79. package/dist/tui/installer/StepComplete.js +46 -0
  80. package/dist/tui/installer/StepComplete.js.map +1 -0
  81. package/dist/tui/installer/StepHub.d.ts +8 -0
  82. package/dist/tui/installer/StepHub.d.ts.map +1 -0
  83. package/dist/tui/installer/StepHub.js +65 -0
  84. package/dist/tui/installer/StepHub.js.map +1 -0
  85. package/dist/tui/installer/StepPacks.d.ts +9 -0
  86. package/dist/tui/installer/StepPacks.d.ts.map +1 -0
  87. package/dist/tui/installer/StepPacks.js +35 -0
  88. package/dist/tui/installer/StepPacks.js.map +1 -0
  89. package/dist/tui/installer/StepPermissions.d.ts +9 -0
  90. package/dist/tui/installer/StepPermissions.d.ts.map +1 -0
  91. package/dist/tui/installer/StepPermissions.js +39 -0
  92. package/dist/tui/installer/StepPermissions.js.map +1 -0
  93. package/dist/tui/installer/StepScan.d.ts +7 -0
  94. package/dist/tui/installer/StepScan.d.ts.map +1 -0
  95. package/dist/tui/installer/StepScan.js +38 -0
  96. package/dist/tui/installer/StepScan.js.map +1 -0
  97. package/dist/tui/manager/ActivityLog.d.ts +7 -0
  98. package/dist/tui/manager/ActivityLog.d.ts.map +1 -0
  99. package/dist/tui/manager/ActivityLog.js +25 -0
  100. package/dist/tui/manager/ActivityLog.js.map +1 -0
  101. package/dist/tui/manager/AuditView.d.ts +7 -0
  102. package/dist/tui/manager/AuditView.d.ts.map +1 -0
  103. package/dist/tui/manager/AuditView.js +32 -0
  104. package/dist/tui/manager/AuditView.js.map +1 -0
  105. package/dist/tui/manager/ManagerApp.d.ts +20 -0
  106. package/dist/tui/manager/ManagerApp.d.ts.map +1 -0
  107. package/dist/tui/manager/ManagerApp.js +79 -0
  108. package/dist/tui/manager/ManagerApp.js.map +1 -0
  109. package/dist/tui/manager/PackManager.d.ts +7 -0
  110. package/dist/tui/manager/PackManager.d.ts.map +1 -0
  111. package/dist/tui/manager/PackManager.js +22 -0
  112. package/dist/tui/manager/PackManager.js.map +1 -0
  113. package/dist/tui/manager/StatusView.d.ts +15 -0
  114. package/dist/tui/manager/StatusView.d.ts.map +1 -0
  115. package/dist/tui/manager/StatusView.js +10 -0
  116. package/dist/tui/manager/StatusView.js.map +1 -0
  117. package/package.json +45 -0
  118. package/scripts/install.sh +11 -0
  119. package/src/cli/packs.test.ts +213 -0
  120. package/src/cli/packs.ts +214 -0
  121. package/src/config.ts +62 -0
  122. package/src/index.ts +218 -0
  123. package/src/runtime/attestation.test.ts +69 -0
  124. package/src/runtime/attestation.ts +36 -0
  125. package/src/runtime/audit.test.ts +64 -0
  126. package/src/runtime/audit.ts +70 -0
  127. package/src/runtime/connection.test.ts +303 -0
  128. package/src/runtime/connection.ts +389 -0
  129. package/src/runtime/executor.test.ts +112 -0
  130. package/src/runtime/executor.ts +107 -0
  131. package/src/runtime/privilege.test.ts +25 -0
  132. package/src/runtime/privilege.ts +36 -0
  133. package/src/runtime/scrubber.test.ts +84 -0
  134. package/src/runtime/scrubber.ts +96 -0
  135. package/src/system/scanner.test.ts +154 -0
  136. package/src/system/scanner.ts +133 -0
  137. package/src/tui/installer/InstallerApp.tsx +86 -0
  138. package/src/tui/installer/StepComplete.tsx +94 -0
  139. package/src/tui/installer/StepHub.tsx +111 -0
  140. package/src/tui/installer/StepPacks.tsx +73 -0
  141. package/src/tui/installer/StepPermissions.tsx +104 -0
  142. package/src/tui/installer/StepScan.tsx +82 -0
  143. package/src/tui/manager/ActivityLog.tsx +57 -0
  144. package/src/tui/manager/AuditView.tsx +73 -0
  145. package/src/tui/manager/ManagerApp.tsx +157 -0
  146. package/src/tui/manager/PackManager.tsx +71 -0
  147. package/src/tui/manager/StatusView.tsx +103 -0
  148. package/tsconfig.json +13 -0
  149. package/vitest.config.ts +8 -0
@@ -0,0 +1,71 @@
1
+ import { Box, Text, useInput } from 'ink';
2
+ import { useState } from 'react';
3
+ import type { ProbeExecutor } from '../../runtime/executor.js';
4
+
5
+ interface PackManagerProps {
6
+ executor: ProbeExecutor;
7
+ }
8
+
9
+ export function PackManager({ executor }: PackManagerProps): JSX.Element {
10
+ const packs = executor.getLoadedPacks();
11
+ const [cursor, setCursor] = useState(0);
12
+
13
+ useInput((_input, key) => {
14
+ if (key.upArrow) {
15
+ setCursor((prev) => (prev > 0 ? prev - 1 : packs.length - 1));
16
+ } else if (key.downArrow) {
17
+ setCursor((prev) => (prev < packs.length - 1 ? prev + 1 : 0));
18
+ }
19
+ });
20
+
21
+ const selectedPack = packs[cursor];
22
+ const fullPack = selectedPack ? executor.getPackByName(selectedPack.name) : undefined;
23
+
24
+ return (
25
+ <Box flexDirection="column">
26
+ <Text bold color="white">
27
+ Packs ({packs.length} loaded)
28
+ </Text>
29
+ <Box marginTop={1} flexDirection="column">
30
+ {packs.map((pack, i) => {
31
+ const isCursor = i === cursor;
32
+ return (
33
+ <Box key={pack.name}>
34
+ <Text color={isCursor ? 'cyan' : 'white'} bold={isCursor}>
35
+ {isCursor ? '> ' : ' '}
36
+ {pack.name}
37
+ </Text>
38
+ <Text color="gray"> v{pack.version}</Text>
39
+ <Text color="green"> [{pack.status}]</Text>
40
+ </Box>
41
+ );
42
+ })}
43
+ </Box>
44
+
45
+ {fullPack && (
46
+ <Box marginTop={1} flexDirection="column">
47
+ <Text bold color="cyan">
48
+ {fullPack.manifest.name}
49
+ </Text>
50
+ <Text color="gray">
51
+ {' '}
52
+ {fullPack.manifest.description}
53
+ </Text>
54
+ <Box marginTop={1} flexDirection="column">
55
+ {fullPack.manifest.probes.map((probe) => (
56
+ <Text key={probe.name}>
57
+ {' '}
58
+ <Text color="white">{probe.name}</Text>
59
+ <Text color="gray"> — {probe.description}</Text>
60
+ </Text>
61
+ ))}
62
+ </Box>
63
+ </Box>
64
+ )}
65
+
66
+ <Box marginTop={1}>
67
+ <Text color="gray">Up/Down: navigate</Text>
68
+ </Box>
69
+ </Box>
70
+ );
71
+ }
@@ -0,0 +1,103 @@
1
+ import { Box, Text } from 'ink';
2
+ import type { AgentConfig } from '../../config.js';
3
+ import type { AgentAuditLog } from '../../runtime/audit.js';
4
+ import type { ProbeExecutor } from '../../runtime/executor.js';
5
+ import type { ActivityEntry } from './ManagerApp.js';
6
+
7
+ interface StatusViewProps {
8
+ config: AgentConfig;
9
+ connected: boolean;
10
+ agentId: string | undefined;
11
+ executor: ProbeExecutor;
12
+ auditLog: AgentAuditLog;
13
+ activity: ActivityEntry[];
14
+ }
15
+
16
+ export function StatusView({
17
+ config,
18
+ connected,
19
+ agentId,
20
+ executor,
21
+ auditLog,
22
+ activity,
23
+ }: StatusViewProps): JSX.Element {
24
+ const packs = executor.getLoadedPacks();
25
+ const chainResult = auditLog.verifyChain();
26
+ const recentEntries = auditLog.getRecent();
27
+ const lastEntry = activity.length > 0 ? activity[activity.length - 1] : undefined;
28
+
29
+ return (
30
+ <Box flexDirection="column">
31
+ <Box flexDirection="column" marginBottom={1}>
32
+ <Text bold color="white">
33
+ Agent
34
+ </Text>
35
+ <Text>
36
+ {' '}Name: <Text color="cyan">{config.agentName}</Text>
37
+ </Text>
38
+ <Text>
39
+ {' '}ID: <Text color="cyan">{agentId ?? '(pending)'}</Text>
40
+ </Text>
41
+ <Text>
42
+ {' '}Hub: <Text color="cyan">{config.hubUrl}</Text>
43
+ </Text>
44
+ </Box>
45
+
46
+ <Box flexDirection="column" marginBottom={1}>
47
+ <Text bold color="white">
48
+ Connection
49
+ </Text>
50
+ <Text>
51
+ {' '}Status:{' '}
52
+ <Text color={connected ? 'green' : 'yellow'}>
53
+ {connected ? 'Connected' : 'Connecting...'}
54
+ </Text>
55
+ </Text>
56
+ <Text>
57
+ {' '}Packs loaded: <Text color="cyan">{packs.length}</Text>
58
+ </Text>
59
+ </Box>
60
+
61
+ <Box flexDirection="column" marginBottom={1}>
62
+ <Text bold color="white">
63
+ Packs
64
+ </Text>
65
+ {packs.map((pack) => (
66
+ <Text key={pack.name}>
67
+ {' '}
68
+ <Text color="cyan">{pack.name}</Text> <Text color="gray">v{pack.version}</Text>{' '}
69
+ <Text color="green">[{pack.status}]</Text>
70
+ </Text>
71
+ ))}
72
+ </Box>
73
+
74
+ <Box flexDirection="column" marginBottom={1}>
75
+ <Text bold color="white">
76
+ Activity
77
+ </Text>
78
+ <Text>
79
+ {' '}Total probes: <Text color="cyan">{activity.length}</Text>
80
+ </Text>
81
+ <Text>
82
+ {' '}Last:{' '}
83
+ <Text color="gray">
84
+ {lastEntry ? `${lastEntry.probe} (${lastEntry.durationMs}ms)` : 'No activity yet'}
85
+ </Text>
86
+ </Text>
87
+ </Box>
88
+
89
+ <Box flexDirection="column">
90
+ <Text bold color="white">
91
+ Audit
92
+ </Text>
93
+ <Text>
94
+ {' '}Chain:{' '}
95
+ <Text color={chainResult.valid ? 'green' : 'red'}>
96
+ {chainResult.valid ? 'Valid' : `Broken at entry ${chainResult.brokenAt}`}
97
+ </Text>
98
+ <Text color="gray"> ({recentEntries.length} entries)</Text>
99
+ </Text>
100
+ </Box>
101
+ </Box>
102
+ );
103
+ }
package/tsconfig.json ADDED
@@ -0,0 +1,13 @@
1
+ {
2
+ "extends": "../../tsconfig.base.json",
3
+ "compilerOptions": {
4
+ "outDir": "dist",
5
+ "rootDir": "src",
6
+ "jsx": "react-jsx"
7
+ },
8
+ "include": ["src"],
9
+ "references": [
10
+ { "path": "../shared" },
11
+ { "path": "../packs" }
12
+ ]
13
+ }
@@ -0,0 +1,8 @@
1
+ import { defineConfig } from 'vitest/config';
2
+
3
+ export default defineConfig({
4
+ test: {
5
+ globals: true,
6
+ passWithNoTests: true,
7
+ },
8
+ });