pi-harness-runtime 1.1.201 → 1.1.203

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 (120) hide show
  1. package/index.ts +59 -22
  2. package/package.json +1 -1
  3. package/packages/a2a-adapter/package.json +1 -1
  4. package/packages/agent-policy/package.json +1 -1
  5. package/packages/architecture-generator/package.json +1 -1
  6. package/packages/auth/package.json +1 -1
  7. package/packages/autonomous-refactor/package.json +1 -1
  8. package/packages/autonomous-runtime/package.json +1 -1
  9. package/packages/cache-strategy/package.json +1 -1
  10. package/packages/capability-registry/package.json +1 -1
  11. package/packages/checkpoint/package.json +1 -1
  12. package/packages/cli-plugin-sdk/package.json +1 -1
  13. package/packages/clipboard/package.json +1 -1
  14. package/packages/clipboard-plugin/package.json +1 -1
  15. package/packages/code-generation/package.json +1 -1
  16. package/packages/code-review/package.json +1 -1
  17. package/packages/codex-adapter/package.json +1 -1
  18. package/packages/codex-watcher/package.json +1 -1
  19. package/packages/config-capture/package.json +1 -1
  20. package/packages/context-compiler/package.json +1 -1
  21. package/packages/context-discovery/package.json +1 -1
  22. package/packages/context-manager/package.json +1 -1
  23. package/packages/cookie-sanitizer/package.json +1 -1
  24. package/packages/cost-optimizer/package.json +1 -1
  25. package/packages/dependency-analyzer/package.json +1 -1
  26. package/packages/django-plugin/package.json +1 -1
  27. package/packages/doc-generator/package.json +1 -1
  28. package/packages/e2e-tester/package.json +1 -1
  29. package/packages/evaluation-engine/package.json +1 -1
  30. package/packages/evaluation-runner/package.json +1 -1
  31. package/packages/event-bus/package.json +1 -1
  32. package/packages/event-store/package.json +1 -1
  33. package/packages/experience-replay/package.json +1 -1
  34. package/packages/feedback-collector/package.json +1 -1
  35. package/packages/file-copy-helper/package.json +1 -1
  36. package/packages/framework-detector/package.json +1 -1
  37. package/packages/framework-plugin-sdk/package.json +1 -1
  38. package/packages/frappe-plugin/package.json +1 -1
  39. package/packages/generic-web-plugin/package.json +1 -1
  40. package/packages/health-monitor/package.json +1 -1
  41. package/packages/intent-analyzer/package.json +1 -1
  42. package/packages/jev-judge/package.json +1 -1
  43. package/packages/knowledge-graph/package.json +1 -1
  44. package/packages/knowledge-retrieval/package.json +1 -1
  45. package/packages/laravel-plugin/package.json +1 -1
  46. package/packages/learning-engine/package.json +1 -1
  47. package/packages/mcp-adapter/package.json +1 -1
  48. package/packages/memory-engine/package.json +1 -1
  49. package/packages/milestone-manager/package.json +1 -1
  50. package/packages/model-registry/package.json +1 -1
  51. package/packages/nextjs-plugin/package.json +1 -1
  52. package/packages/notification/dist/harness-types.d.ts +87 -0
  53. package/packages/notification/dist/harness-types.d.ts.map +1 -0
  54. package/packages/notification/dist/harness-types.js +7 -0
  55. package/packages/notification/dist/harness-types.js.map +1 -0
  56. package/packages/notification/dist/harness-widget-manager.d.ts +79 -0
  57. package/packages/notification/dist/harness-widget-manager.d.ts.map +1 -0
  58. package/packages/notification/dist/harness-widget-manager.js +162 -0
  59. package/packages/notification/dist/harness-widget-manager.js.map +1 -0
  60. package/packages/notification/dist/harness-widget.d.ts +48 -0
  61. package/packages/notification/dist/harness-widget.d.ts.map +1 -0
  62. package/packages/notification/dist/harness-widget.js +145 -0
  63. package/packages/notification/dist/harness-widget.js.map +1 -0
  64. package/packages/notification/dist/index.d.ts +3 -0
  65. package/packages/notification/dist/index.d.ts.map +1 -1
  66. package/packages/notification/dist/index.js +3 -0
  67. package/packages/notification/dist/index.js.map +1 -1
  68. package/packages/notification/package.json +1 -1
  69. package/packages/notification/src/harness-types.ts +93 -0
  70. package/packages/notification/src/harness-widget-manager.ts +194 -0
  71. package/packages/notification/src/index.ts +11 -0
  72. package/packages/observability/package.json +1 -1
  73. package/packages/okf-indexer/package.json +1 -1
  74. package/packages/paperclip-integration/package.json +1 -1
  75. package/packages/performance-optimizer/package.json +1 -1
  76. package/packages/privilege-broker/package.json +1 -1
  77. package/packages/project-analyzer/package.json +1 -1
  78. package/packages/project-bootstrap/package.json +1 -1
  79. package/packages/projection-engine/package.json +1 -1
  80. package/packages/prompt-compiler/package.json +1 -1
  81. package/packages/prompt-versioning/package.json +1 -1
  82. package/packages/provider-adapter-sdk/package.json +1 -1
  83. package/packages/provider-router/package.json +1 -1
  84. package/packages/provider-selector/package.json +1 -1
  85. package/packages/providers/package.json +1 -1
  86. package/packages/qdrant-skills/package.json +1 -1
  87. package/packages/quota-manager/package.json +1 -1
  88. package/packages/rate-limiter/package.json +1 -1
  89. package/packages/react-vite-plugin/package.json +1 -1
  90. package/packages/release-manager/package.json +1 -1
  91. package/packages/requirement-compiler/package.json +1 -1
  92. package/packages/runtime/package.json +1 -1
  93. package/packages/scheduler/package.json +1 -1
  94. package/packages/scheduler-adapter/package.json +1 -1
  95. package/packages/session/package.json +1 -1
  96. package/packages/session-api/package.json +1 -1
  97. package/packages/session-export/package.json +1 -1
  98. package/packages/shared-context/package.json +1 -1
  99. package/packages/skill-mcp-client/package.json +1 -1
  100. package/packages/skill-registry/package.json +1 -1
  101. package/packages/skills/package.json +1 -1
  102. package/packages/sprint-planner/package.json +1 -1
  103. package/packages/subscription-engine/package.json +1 -1
  104. package/packages/task-compiler/package.json +1 -1
  105. package/packages/telegram/package.json +1 -1
  106. package/packages/tencentdb-memory/package.json +1 -1
  107. package/packages/tencentdb-sync/package.json +1 -1
  108. package/packages/test-data-generator/package.json +1 -1
  109. package/packages/test-generator/package.json +1 -1
  110. package/packages/todo-bd-sync/package.json +1 -1
  111. package/packages/token-estimation/package.json +1 -1
  112. package/packages/token-optimizer/package.json +1 -1
  113. package/packages/trajectory/package.json +1 -1
  114. package/packages/tui/package.json +1 -1
  115. package/packages/types/package.json +1 -1
  116. package/packages/webmcp-tester/package.json +1 -1
  117. package/packages/workflow-events/package.json +1 -1
  118. package/packages/workspace-scanner/package.json +1 -1
  119. package/packages/worktree/package.json +1 -1
  120. package/packages/write-review/package.json +1 -1
@@ -0,0 +1,87 @@
1
+ /**
2
+ * Harness Types
3
+ *
4
+ * Structured types for harness runtime status.
5
+ */
6
+ /**
7
+ * Overall harness status
8
+ */
9
+ export interface HarnessStatus {
10
+ /** Version string */
11
+ version: string;
12
+ /** Tagline description */
13
+ tagline: string;
14
+ /** Runtime initialization status */
15
+ runtime: StatusDetail;
16
+ /** Qdrant vector database status */
17
+ qdrant?: StatusDetail;
18
+ /** Honcho integration status */
19
+ honcho?: HonchoStatus;
20
+ /** Telegram integration status */
21
+ telegram?: TelegramStatus;
22
+ /** Skills discovery status */
23
+ skills?: SkillsStatus;
24
+ /** Registered commands */
25
+ commands?: string[];
26
+ }
27
+ /**
28
+ * Basic status detail
29
+ */
30
+ export interface StatusDetail {
31
+ /** Current status text */
32
+ status: string;
33
+ /** Optional details */
34
+ details?: string;
35
+ /** Error message if failed */
36
+ error?: string;
37
+ }
38
+ /**
39
+ * Honcho-specific status
40
+ */
41
+ export interface HonchoStatus extends StatusDetail {
42
+ /** Session ID if connected */
43
+ sessionId?: string;
44
+ /** Whether memory is configured */
45
+ memoryConfigured?: boolean;
46
+ }
47
+ /**
48
+ * Telegram-specific status
49
+ */
50
+ export interface TelegramStatus extends StatusDetail {
51
+ /** Bot username */
52
+ botName?: string;
53
+ /** Whether outbound is verified */
54
+ outboundVerified?: boolean;
55
+ /** Whether inbound is connected */
56
+ inboundConnected?: boolean;
57
+ }
58
+ /**
59
+ * Skills status
60
+ */
61
+ export interface SkillsStatus {
62
+ /** Number of skills discovered */
63
+ count: number;
64
+ /** Number of commands registered */
65
+ commandCount?: number;
66
+ }
67
+ /**
68
+ * Widget state for UI
69
+ */
70
+ export interface WidgetState {
71
+ /** Whether widget is expanded */
72
+ expanded: boolean;
73
+ /** Current harness status */
74
+ status: HarnessStatus;
75
+ /** Last updated timestamp */
76
+ updatedAt: number;
77
+ }
78
+ /**
79
+ * Widget update event
80
+ */
81
+ export interface WidgetUpdateEvent {
82
+ /** What changed */
83
+ change: "status" | "expansion" | "commands";
84
+ /** Updated status if applicable */
85
+ status?: Partial<HarnessStatus>;
86
+ }
87
+ //# sourceMappingURL=harness-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"harness-types.d.ts","sourceRoot":"","sources":["../src/harness-types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,MAAM,WAAW,aAAa;IAC7B,qBAAqB;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,0BAA0B;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,oCAAoC;IACpC,OAAO,EAAE,YAAY,CAAC;IACtB,oCAAoC;IACpC,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,gCAAgC;IAChC,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,kCAAkC;IAClC,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,8BAA8B;IAC9B,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,0BAA0B;IAC1B,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC5B,0BAA0B;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,uBAAuB;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,8BAA8B;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,YAAa,SAAQ,YAAY;IACjD,8BAA8B;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mCAAmC;IACnC,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,cAAe,SAAQ,YAAY;IACnD,mBAAmB;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,mCAAmC;IACnC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,mCAAmC;IACnC,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC5B,kCAAkC;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,oCAAoC;IACpC,YAAY,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC3B,iCAAiC;IACjC,QAAQ,EAAE,OAAO,CAAC;IAClB,6BAA6B;IAC7B,MAAM,EAAE,aAAa,CAAC;IACtB,6BAA6B;IAC7B,SAAS,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IACjC,mBAAmB;IACnB,MAAM,EAAE,QAAQ,GAAG,WAAW,GAAG,UAAU,CAAC;IAC5C,mCAAmC;IACnC,MAAM,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;CAChC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Harness Types
3
+ *
4
+ * Structured types for harness runtime status.
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=harness-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"harness-types.js","sourceRoot":"","sources":["../src/harness-types.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
@@ -0,0 +1,79 @@
1
+ /**
2
+ * Pi-harness Startup Widget Manager
3
+ *
4
+ * Manages the Pi-harness startup widget with proper styling
5
+ * and overflow protection.
6
+ */
7
+ import type { ExtensionAPI, ExtensionContext } from "@earendil-works/pi-coding-agent";
8
+ import type { HarnessStatus } from "./harness-types.js";
9
+ /**
10
+ * Harness Widget Manager
11
+ */
12
+ export declare class HarnessWidget {
13
+ private ui;
14
+ private status;
15
+ private expanded;
16
+ private updateTimeout;
17
+ constructor(_pi: ExtensionAPI);
18
+ /**
19
+ * Initialize with UI context (called during setup)
20
+ */
21
+ initWithUI(ui: ExtensionContext["ui"]): void;
22
+ /**
23
+ * Update harness status and refresh widget
24
+ */
25
+ updateStatus(updates: Partial<HarnessStatus>): void;
26
+ /**
27
+ * Update specific component status
28
+ */
29
+ updateComponent<K extends keyof HarnessStatus>(component: K, value: HarnessStatus[K]): void;
30
+ /**
31
+ * Render and display the widget
32
+ */
33
+ render(): void;
34
+ /**
35
+ * Initialize widget with version info
36
+ */
37
+ initialize(version: string, tagline: string): void;
38
+ /**
39
+ * Set runtime status
40
+ */
41
+ setRuntime(status: string): void;
42
+ /**
43
+ * Set Qdrant status
44
+ */
45
+ setQdrant(status: string, details?: string): void;
46
+ /**
47
+ * Set Honcho status
48
+ */
49
+ setHoncho(status: string, sessionId?: string): void;
50
+ /**
51
+ * Set Telegram status
52
+ */
53
+ setTelegram(status: string, botName?: string): void;
54
+ /**
55
+ * Set skills count
56
+ */
57
+ setSkills(count: number): void;
58
+ /**
59
+ * Set commands
60
+ */
61
+ setCommands(commands: string[]): void;
62
+ /**
63
+ * Mark component as complete with icon
64
+ */
65
+ markComplete(component: keyof HarnessStatus, value?: string): void;
66
+ /**
67
+ * Mark component as failed
68
+ */
69
+ markFailed(component: keyof HarnessStatus, error: string): void;
70
+ /**
71
+ * Cleanup
72
+ */
73
+ dispose(): void;
74
+ }
75
+ /**
76
+ * Create harness widget instance
77
+ */
78
+ export declare function createHarnessWidget(_pi: ExtensionAPI): HarnessWidget;
79
+ //# sourceMappingURL=harness-widget-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"harness-widget-manager.d.ts","sourceRoot":"","sources":["../src/harness-widget-manager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACtF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAUxD;;GAEG;AACH,qBAAa,aAAa;IACzB,OAAO,CAAC,EAAE,CAAuC;IACjD,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,QAAQ,CAAkB;IAClC,OAAO,CAAC,aAAa,CAA8C;IAEnE,YAAY,GAAG,EAAE,YAAY,EAM5B;IAED;;OAEG;IACH,UAAU,CAAC,EAAE,EAAE,gBAAgB,CAAC,IAAI,CAAC,GAAG,IAAI,CAG3C;IAED;;OAEG;IACH,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,IAAI,CAelD;IAED;;OAEG;IACH,eAAe,CAAC,CAAC,SAAS,MAAM,aAAa,EAC5C,SAAS,EAAE,CAAC,EACZ,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,GACrB,IAAI,CAaN;IAED;;OAEG;IACH,MAAM,IAAI,IAAI,CAgBb;IAED;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAIjD;IAED;;OAEG;IACH,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAE/B;IAED;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAEhD;IAED;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAElD;IAED;;OAEG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAElD;IAED;;OAEG;IACH,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAE7B;IAED;;OAEG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,CAEpC;IAED;;OAEG;IACH,YAAY,CAAC,SAAS,EAAE,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAGjE;IAED;;OAEG;IACH,UAAU,CAAC,SAAS,EAAE,MAAM,aAAa,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAE9D;IAED;;OAEG;IACH,OAAO,IAAI,IAAI,CAUd;CACD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,YAAY,GAAG,aAAa,CAGpE"}
@@ -0,0 +1,162 @@
1
+ /**
2
+ * Pi-harness Startup Widget Manager
3
+ *
4
+ * Manages the Pi-harness startup widget with proper styling
5
+ * and overflow protection.
6
+ */
7
+ import { renderWidgetBody, createInitialStatus, } from "./harness-widget.js";
8
+ // Widget key constant
9
+ const HARNESS_WIDGET_KEY = "pi-harness-startup";
10
+ /**
11
+ * Harness Widget Manager
12
+ */
13
+ export class HarnessWidget {
14
+ ui = null;
15
+ status;
16
+ expanded = false;
17
+ updateTimeout = null;
18
+ constructor(_pi) {
19
+ this.status = createInitialStatus();
20
+ // Get ui from ExtensionContext if available
21
+ // In extensions, pi.ui is available through ctx.ui in event handlers
22
+ // We store a reference during session_start
23
+ }
24
+ /**
25
+ * Initialize with UI context (called during setup)
26
+ */
27
+ initWithUI(ui) {
28
+ this.ui = ui;
29
+ this.render();
30
+ }
31
+ /**
32
+ * Update harness status and refresh widget
33
+ */
34
+ updateStatus(updates) {
35
+ // Merge updates
36
+ this.status = {
37
+ ...this.status,
38
+ ...updates,
39
+ };
40
+ // Debounce updates to avoid excessive re-renders
41
+ if (this.updateTimeout) {
42
+ clearTimeout(this.updateTimeout);
43
+ }
44
+ this.updateTimeout = setTimeout(() => {
45
+ this.render();
46
+ }, 100);
47
+ }
48
+ /**
49
+ * Update specific component status
50
+ */
51
+ updateComponent(component, value) {
52
+ this.status = {
53
+ ...this.status,
54
+ [component]: value,
55
+ };
56
+ if (this.updateTimeout) {
57
+ clearTimeout(this.updateTimeout);
58
+ }
59
+ this.updateTimeout = setTimeout(() => {
60
+ this.render();
61
+ }, 100);
62
+ }
63
+ /**
64
+ * Render and display the widget
65
+ */
66
+ render() {
67
+ if (!this.ui)
68
+ return;
69
+ const body = renderWidgetBody(this.status);
70
+ // Build widget content with heading
71
+ const heading = `[Pi-harness]`;
72
+ const content = [heading, ...body];
73
+ // Use setWidget
74
+ try {
75
+ this.ui.setWidget(HARNESS_WIDGET_KEY, content);
76
+ }
77
+ catch (err) {
78
+ // Fallback: log to stderr if widget fails
79
+ console.error("[pi-harness] Widget render failed:", err);
80
+ }
81
+ }
82
+ /**
83
+ * Initialize widget with version info
84
+ */
85
+ initialize(version, tagline) {
86
+ this.status.version = version;
87
+ this.status.tagline = tagline;
88
+ this.render();
89
+ }
90
+ /**
91
+ * Set runtime status
92
+ */
93
+ setRuntime(status) {
94
+ this.updateComponent("runtime", { status });
95
+ }
96
+ /**
97
+ * Set Qdrant status
98
+ */
99
+ setQdrant(status, details) {
100
+ this.updateComponent("qdrant", { status, details });
101
+ }
102
+ /**
103
+ * Set Honcho status
104
+ */
105
+ setHoncho(status, sessionId) {
106
+ this.updateComponent("honcho", { status, sessionId });
107
+ }
108
+ /**
109
+ * Set Telegram status
110
+ */
111
+ setTelegram(status, botName) {
112
+ this.updateComponent("telegram", { status, botName });
113
+ }
114
+ /**
115
+ * Set skills count
116
+ */
117
+ setSkills(count) {
118
+ this.updateComponent("skills", { count });
119
+ }
120
+ /**
121
+ * Set commands
122
+ */
123
+ setCommands(commands) {
124
+ this.updateComponent("commands", commands);
125
+ }
126
+ /**
127
+ * Mark component as complete with icon
128
+ */
129
+ markComplete(component, value) {
130
+ const completeStatus = value ? `${value} ✓` : "ready ✓";
131
+ this.updateComponent(component, { status: completeStatus });
132
+ }
133
+ /**
134
+ * Mark component as failed
135
+ */
136
+ markFailed(component, error) {
137
+ this.updateComponent(component, { status: "failed", error });
138
+ }
139
+ /**
140
+ * Cleanup
141
+ */
142
+ dispose() {
143
+ if (this.updateTimeout) {
144
+ clearTimeout(this.updateTimeout);
145
+ }
146
+ // Remove widget
147
+ try {
148
+ this.ui?.setWidget(HARNESS_WIDGET_KEY, undefined);
149
+ }
150
+ catch {
151
+ // Ignore cleanup errors
152
+ }
153
+ }
154
+ }
155
+ /**
156
+ * Create harness widget instance
157
+ */
158
+ export function createHarnessWidget(_pi) {
159
+ const widget = new HarnessWidget(_pi);
160
+ return widget;
161
+ }
162
+ //# sourceMappingURL=harness-widget-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"harness-widget-manager.js","sourceRoot":"","sources":["../src/harness-widget-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Pi-harness Startup Widget
3
+ *
4
+ * Renders harness status as a widget with native Pi styling.
5
+ * Handles terminal width detection and overflow protection.
6
+ */
7
+ import type { HarnessStatus } from "./harness-types.js";
8
+ /**
9
+ * Widget configuration
10
+ */
11
+ export interface WidgetConfig {
12
+ /** Heading style (matching Pi's mdHeading) */
13
+ headingStyle?: string;
14
+ /** Body text style */
15
+ bodyStyle?: string;
16
+ /** Left indent for body lines */
17
+ indent?: string;
18
+ /** Max terminal width fallback */
19
+ defaultWidth?: number;
20
+ }
21
+ /**
22
+ * Get terminal width
23
+ */
24
+ export declare function getTerminalWidth(): number;
25
+ /**
26
+ * Truncate text to fit within max width
27
+ */
28
+ export declare function truncate(text: string, maxWidth: number): string;
29
+ /**
30
+ * Truncate text in the middle (for paths/lists)
31
+ */
32
+ export declare function truncateMiddle(text: string, maxWidth: number): string;
33
+ /**
34
+ * Render harness status as widget body (string array for setWidget)
35
+ */
36
+ export declare function renderWidgetBody(status: HarnessStatus, config?: Partial<WidgetConfig>): string[];
37
+ /**
38
+ * Create initial pending status
39
+ */
40
+ export declare function createInitialStatus(): HarnessStatus;
41
+ /**
42
+ * Format status with icons
43
+ */
44
+ export declare function formatStatusWithIcon(status: string): {
45
+ status: string;
46
+ icon?: string;
47
+ };
48
+ //# sourceMappingURL=harness-widget.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"harness-widget.d.ts","sourceRoot":"","sources":["../src/harness-widget.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD;;GAEG;AACH,MAAM,WAAW,YAAY;IAC5B,8CAA8C;IAC9C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,sBAAsB;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iCAAiC;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kCAAkC;IAClC,YAAY,CAAC,EAAE,MAAM,CAAC;CACtB;AAYD;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,CAUzC;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAM/D;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAMrE;AAkCD;;GAEG;AACH,wBAAgB,gBAAgB,CAC/B,MAAM,EAAE,aAAa,EACrB,MAAM,GAAE,OAAO,CAAC,YAAY,CAAM,GAChC,MAAM,EAAE,CA8CV;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,aAAa,CAWnD;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CACnC,MAAM,EAAE,MAAM,GACZ;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAWnC"}
@@ -0,0 +1,145 @@
1
+ /**
2
+ * Pi-harness Startup Widget
3
+ *
4
+ * Renders harness status as a widget with native Pi styling.
5
+ * Handles terminal width detection and overflow protection.
6
+ */
7
+ /**
8
+ * Default config
9
+ */
10
+ const DEFAULT_CONFIG = {
11
+ headingStyle: "mdHeading",
12
+ bodyStyle: "dim",
13
+ indent: " ",
14
+ defaultWidth: 80,
15
+ };
16
+ /**
17
+ * Get terminal width
18
+ */
19
+ export function getTerminalWidth() {
20
+ // Try stdout columns
21
+ if (typeof process !== "undefined" && process.stdout) {
22
+ const cols = process.stdout.columns;
23
+ if (cols && cols > 0) {
24
+ return cols;
25
+ }
26
+ }
27
+ // Fallback to default
28
+ return DEFAULT_CONFIG.defaultWidth;
29
+ }
30
+ /**
31
+ * Truncate text to fit within max width
32
+ */
33
+ export function truncate(text, maxWidth) {
34
+ if (text.length <= maxWidth) {
35
+ return text;
36
+ }
37
+ // Leave room for "..." suffix
38
+ return text.substring(0, Math.max(0, maxWidth - 3)) + "...";
39
+ }
40
+ /**
41
+ * Truncate text in the middle (for paths/lists)
42
+ */
43
+ export function truncateMiddle(text, maxWidth) {
44
+ if (text.length <= maxWidth) {
45
+ return text;
46
+ }
47
+ const half = Math.floor((maxWidth - 3) / 2);
48
+ return text.substring(0, half) + "..." + text.substring(text.length - half);
49
+ }
50
+ /**
51
+ * Render a status line with optional icon
52
+ */
53
+ function renderStatusLine(label, value, width, indent) {
54
+ const maxValueWidth = width - indent.length - label.length - 2; // ": " separator
55
+ const truncatedValue = truncate(value, maxValueWidth);
56
+ return `${indent}${label}: ${truncatedValue}`;
57
+ }
58
+ /**
59
+ * Render version/tagline line
60
+ */
61
+ function renderVersionLine(tagline, width, indent) {
62
+ const maxTagWidth = width - indent.length - 2;
63
+ return `${indent}${truncate(tagline, maxTagWidth)}`;
64
+ }
65
+ /**
66
+ * Render commands line with truncation
67
+ */
68
+ function renderCommandsLine(commands, width, indent) {
69
+ const prefix = `${indent}Commands: `;
70
+ const maxWidth = width - prefix.length;
71
+ const joined = commands.join(", ");
72
+ return prefix + truncate(joined, maxWidth);
73
+ }
74
+ /**
75
+ * Render harness status as widget body (string array for setWidget)
76
+ */
77
+ export function renderWidgetBody(status, config = {}) {
78
+ const cfg = { ...DEFAULT_CONFIG, ...config };
79
+ const width = getTerminalWidth();
80
+ const indent = cfg.indent;
81
+ const lines = [];
82
+ // Version/tagline line
83
+ lines.push(renderVersionLine(status.tagline, width, indent));
84
+ // Runtime status
85
+ lines.push(renderStatusLine("Runtime", status.runtime.status, width, indent));
86
+ // Qdrant status
87
+ if (status.qdrant) {
88
+ lines.push(renderStatusLine("Qdrant", status.qdrant.status, width, indent));
89
+ }
90
+ // Honcho status
91
+ if (status.honcho) {
92
+ const honchoDetail = status.honcho.sessionId
93
+ ? `${status.honcho.status} (${status.honcho.sessionId})`
94
+ : status.honcho.status;
95
+ lines.push(renderStatusLine("Honcho", honchoDetail, width, indent));
96
+ }
97
+ // Telegram status
98
+ if (status.telegram) {
99
+ const tgDetail = status.telegram.botName
100
+ ? `${status.telegram.status}: @${status.telegram.botName}`
101
+ : status.telegram.status;
102
+ lines.push(renderStatusLine("Telegram", tgDetail, width, indent));
103
+ }
104
+ // Skills status
105
+ if (status.skills) {
106
+ const skillDetail = `${status.skills.count} discovered`;
107
+ lines.push(renderStatusLine("Skills", skillDetail, width, indent));
108
+ }
109
+ // Commands line (always last, most likely to overflow)
110
+ if (status.commands && status.commands.length > 0) {
111
+ lines.push(renderCommandsLine(status.commands, width, indent));
112
+ }
113
+ return lines;
114
+ }
115
+ /**
116
+ * Create initial pending status
117
+ */
118
+ export function createInitialStatus() {
119
+ return {
120
+ version: "v1.0.0",
121
+ tagline: "quota management, automation, memory, multi-agent",
122
+ runtime: { status: "initializing..." },
123
+ qdrant: { status: "configuring..." },
124
+ honcho: { status: "initializing..." },
125
+ telegram: { status: "connecting..." },
126
+ skills: { count: 0 },
127
+ commands: [],
128
+ };
129
+ }
130
+ /**
131
+ * Format status with icons
132
+ */
133
+ export function formatStatusWithIcon(status) {
134
+ if (status.includes("✓") || status.includes("ready")) {
135
+ return { status, icon: "✓" };
136
+ }
137
+ if (status.includes("✗") || status.includes("error") || status.includes("failed")) {
138
+ return { status, icon: "✗" };
139
+ }
140
+ if (status.includes("...")) {
141
+ return { status, icon: "..." };
142
+ }
143
+ return { status };
144
+ }
145
+ //# sourceMappingURL=harness-widget.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"harness-widget.js","sourceRoot":"","sources":["../src/harness-widget.ts"],"names":[],"mappings":"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"}
@@ -13,4 +13,7 @@ export { TelegramAdapter } from "./adapters/telegram-adapter.js";
13
13
  export { maskString, maskValue, maskObject, maskPayload, isSensitiveField, } from "./mask-secrets.js";
14
14
  export { filterTelegramContent, getSafeNotificationLog, } from "./telegram-content-filter.js";
15
15
  export { ConversationBridge, createConversationBridge, } from "./conversation-bridge.js";
16
+ export { HarnessWidget, createHarnessWidget } from "./harness-widget-manager.js";
17
+ export type { HarnessStatus, StatusDetail, HonchoStatus, TelegramStatus, SkillsStatus } from "./harness-types.js";
18
+ export { renderWidgetBody, createInitialStatus, getTerminalWidth, truncate, truncateMiddle, } from "./harness-widget-manager.js";
16
19
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,0BAA0B,CAAC;AACzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC;AAC3B,cAAc,+BAA+B,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC5E,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EACN,UAAU,EACV,SAAS,EACT,UAAU,EACV,WAAW,EACX,gBAAgB,GAChB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACN,qBAAqB,EACrB,sBAAsB,GACtB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACN,kBAAkB,EAClB,wBAAwB,GACxB,MAAM,0BAA0B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,0BAA0B,CAAC;AACzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC;AAC3B,cAAc,+BAA+B,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC5E,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EACN,UAAU,EACV,SAAS,EACT,UAAU,EACV,WAAW,EACX,gBAAgB,GAChB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACN,qBAAqB,EACrB,sBAAsB,GACtB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACN,kBAAkB,EAClB,wBAAwB,GACxB,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AACjF,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClH,OAAO,EACN,gBAAgB,EAChB,mBAAmB,EACnB,gBAAgB,EAChB,QAAQ,EACR,cAAc,GACd,MAAM,6BAA6B,CAAC"}
@@ -13,4 +13,7 @@ export { TelegramAdapter } from "./adapters/telegram-adapter.js";
13
13
  export { maskString, maskValue, maskObject, maskPayload, isSensitiveField, } from "./mask-secrets.js";
14
14
  export { filterTelegramContent, getSafeNotificationLog, } from "./telegram-content-filter.js";
15
15
  export { ConversationBridge, createConversationBridge, } from "./conversation-bridge.js";
16
+ // Harness widget exports
17
+ export { HarnessWidget, createHarnessWidget } from "./harness-widget-manager.js";
18
+ export { renderWidgetBody, createInitialStatus, getTerminalWidth, truncate, truncateMiddle, } from "./harness-widget-manager.js";
16
19
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,0BAA0B,CAAC;AACzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC;AAC3B,cAAc,+BAA+B,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC5E,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EACN,UAAU,EACV,SAAS,EACT,UAAU,EACV,WAAW,EACX,gBAAgB,GAChB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACN,qBAAqB,EACrB,sBAAsB,GACtB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACN,kBAAkB,EAClB,wBAAwB,GACxB,MAAM,0BAA0B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,0BAA0B,CAAC;AACzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC;AAC3B,cAAc,+BAA+B,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC5E,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EACN,UAAU,EACV,SAAS,EACT,UAAU,EACV,WAAW,EACX,gBAAgB,GAChB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACN,qBAAqB,EACrB,sBAAsB,GACtB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACN,kBAAkB,EAClB,wBAAwB,GACxB,MAAM,0BAA0B,CAAC;AAElC,yBAAyB;AACzB,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAEjF,OAAO,EACN,gBAAgB,EAChB,mBAAmB,EACnB,gBAAgB,EAChB,QAAQ,EACR,cAAc,GACd,MAAM,6BAA6B,CAAC"}
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/notification",
3
- "version": "1.1.201",
3
+ "version": "1.1.203",
4
4
  "description": "pi-harness-runtime — notification",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",