@ouro.bot/cli 0.1.0-alpha.13 → 0.1.0-alpha.131

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 (126) hide show
  1. package/AdoptionSpecialist.ouro/psyche/SOUL.md +2 -2
  2. package/AdoptionSpecialist.ouro/psyche/identities/monty.md +2 -2
  3. package/README.md +147 -205
  4. package/changelog.json +814 -0
  5. package/dist/heart/active-work.js +622 -0
  6. package/dist/heart/bridges/manager.js +358 -0
  7. package/dist/heart/bridges/state-machine.js +135 -0
  8. package/dist/heart/bridges/store.js +123 -0
  9. package/dist/heart/commitments.js +105 -0
  10. package/dist/heart/config.js +66 -21
  11. package/dist/heart/core.js +518 -100
  12. package/dist/heart/cross-chat-delivery.js +146 -0
  13. package/dist/heart/daemon/agent-discovery.js +81 -0
  14. package/dist/heart/daemon/auth-flow.js +457 -0
  15. package/dist/heart/daemon/daemon-cli.js +1516 -195
  16. package/dist/heart/daemon/daemon-entry.js +43 -2
  17. package/dist/heart/daemon/daemon-runtime-sync.js +212 -0
  18. package/dist/heart/daemon/daemon.js +261 -1
  19. package/dist/heart/daemon/hatch-animation.js +10 -3
  20. package/dist/heart/daemon/hatch-flow.js +7 -72
  21. package/dist/heart/daemon/hooks/bundle-meta.js +92 -0
  22. package/dist/heart/daemon/launchd.js +159 -0
  23. package/dist/heart/daemon/log-tailer.js +4 -3
  24. package/dist/heart/daemon/message-router.js +17 -8
  25. package/dist/heart/daemon/ouro-bot-global-installer.js +128 -0
  26. package/dist/heart/daemon/ouro-path-installer.js +57 -29
  27. package/dist/heart/daemon/ouro-version-manager.js +171 -0
  28. package/dist/heart/daemon/process-manager.js +13 -0
  29. package/dist/heart/daemon/run-hooks.js +37 -0
  30. package/dist/heart/daemon/runtime-logging.js +58 -15
  31. package/dist/heart/daemon/runtime-metadata.js +219 -0
  32. package/dist/heart/daemon/runtime-mode.js +67 -0
  33. package/dist/heart/daemon/sense-manager.js +50 -2
  34. package/dist/heart/daemon/skill-management-installer.js +94 -0
  35. package/dist/heart/daemon/socket-client.js +202 -0
  36. package/dist/heart/daemon/specialist-orchestrator.js +2 -2
  37. package/dist/heart/daemon/specialist-prompt.js +7 -4
  38. package/dist/heart/daemon/specialist-tools.js +52 -3
  39. package/dist/heart/daemon/staged-restart.js +114 -0
  40. package/dist/heart/daemon/thoughts.js +507 -0
  41. package/dist/heart/daemon/update-checker.js +111 -0
  42. package/dist/heart/daemon/update-hooks.js +138 -0
  43. package/dist/heart/daemon/wrapper-publish-guard.js +86 -0
  44. package/dist/heart/delegation.js +62 -0
  45. package/dist/heart/identity.js +64 -21
  46. package/dist/heart/kicks.js +1 -19
  47. package/dist/heart/model-capabilities.js +48 -0
  48. package/dist/heart/obligations.js +197 -0
  49. package/dist/heart/progress-story.js +42 -0
  50. package/dist/heart/provider-failover.js +88 -0
  51. package/dist/heart/provider-ping.js +159 -0
  52. package/dist/heart/providers/anthropic-token.js +163 -0
  53. package/dist/heart/providers/anthropic.js +195 -34
  54. package/dist/heart/providers/azure.js +115 -9
  55. package/dist/heart/providers/github-copilot.js +157 -0
  56. package/dist/heart/providers/minimax.js +33 -3
  57. package/dist/heart/providers/openai-codex.js +49 -14
  58. package/dist/heart/safe-workspace.js +381 -0
  59. package/dist/heart/session-activity.js +173 -0
  60. package/dist/heart/session-recall.js +216 -0
  61. package/dist/heart/streaming.js +108 -24
  62. package/dist/heart/target-resolution.js +123 -0
  63. package/dist/heart/tool-loop.js +194 -0
  64. package/dist/heart/turn-coordinator.js +28 -0
  65. package/dist/mind/associative-recall.js +14 -2
  66. package/dist/mind/bundle-manifest.js +12 -0
  67. package/dist/mind/context.js +60 -14
  68. package/dist/mind/first-impressions.js +16 -2
  69. package/dist/mind/friends/channel.js +35 -0
  70. package/dist/mind/friends/group-context.js +144 -0
  71. package/dist/mind/friends/store-file.js +19 -0
  72. package/dist/mind/friends/trust-explanation.js +74 -0
  73. package/dist/mind/friends/types.js +8 -0
  74. package/dist/mind/memory.js +27 -26
  75. package/dist/mind/obligation-steering.js +221 -0
  76. package/dist/mind/pending.js +76 -9
  77. package/dist/mind/phrases.js +1 -0
  78. package/dist/mind/prompt.js +456 -77
  79. package/dist/mind/token-estimate.js +8 -12
  80. package/dist/nerves/cli-logging.js +15 -2
  81. package/dist/nerves/coverage/run-artifacts.js +1 -1
  82. package/dist/nerves/index.js +12 -0
  83. package/dist/nerves/runtime.js +5 -1
  84. package/dist/repertoire/ado-client.js +4 -2
  85. package/dist/repertoire/coding/context-pack.js +254 -0
  86. package/dist/repertoire/coding/feedback.js +301 -0
  87. package/dist/repertoire/coding/index.js +4 -1
  88. package/dist/repertoire/coding/manager.js +210 -4
  89. package/dist/repertoire/coding/spawner.js +39 -9
  90. package/dist/repertoire/coding/tools.js +171 -4
  91. package/dist/repertoire/data/ado-endpoints.json +188 -0
  92. package/dist/repertoire/guardrails.js +290 -0
  93. package/dist/repertoire/mcp-client.js +254 -0
  94. package/dist/repertoire/mcp-manager.js +198 -0
  95. package/dist/repertoire/skills.js +3 -26
  96. package/dist/repertoire/tasks/board.js +12 -0
  97. package/dist/repertoire/tasks/index.js +23 -9
  98. package/dist/repertoire/tasks/transitions.js +1 -2
  99. package/dist/repertoire/tools-base.js +925 -250
  100. package/dist/repertoire/tools-bluebubbles.js +93 -0
  101. package/dist/repertoire/tools-teams.js +58 -25
  102. package/dist/repertoire/tools.js +106 -53
  103. package/dist/senses/bluebubbles-client.js +210 -5
  104. package/dist/senses/bluebubbles-entry.js +2 -0
  105. package/dist/senses/bluebubbles-inbound-log.js +109 -0
  106. package/dist/senses/bluebubbles-media.js +339 -0
  107. package/dist/senses/bluebubbles-model.js +12 -4
  108. package/dist/senses/bluebubbles-mutation-log.js +45 -5
  109. package/dist/senses/bluebubbles-runtime-state.js +109 -0
  110. package/dist/senses/bluebubbles-session-cleanup.js +72 -0
  111. package/dist/senses/bluebubbles.js +915 -45
  112. package/dist/senses/cli-layout.js +187 -0
  113. package/dist/senses/cli.js +374 -131
  114. package/dist/senses/continuity.js +94 -0
  115. package/dist/senses/debug-activity.js +154 -0
  116. package/dist/senses/inner-dialog-worker.js +47 -18
  117. package/dist/senses/inner-dialog.js +388 -83
  118. package/dist/senses/pipeline.js +444 -0
  119. package/dist/senses/teams.js +607 -129
  120. package/dist/senses/trust-gate.js +112 -2
  121. package/package.json +9 -3
  122. package/subagents/README.md +4 -70
  123. package/dist/heart/daemon/subagent-installer.js +0 -134
  124. package/subagents/work-doer.md +0 -233
  125. package/subagents/work-merger.md +0 -624
  126. package/subagents/work-planner.md +0 -373
@@ -33,24 +33,60 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.INNER_DIALOG_PENDING = void 0;
36
37
  exports.getPendingDir = getPendingDir;
38
+ exports.getDeferredReturnDir = getDeferredReturnDir;
39
+ exports.getInnerDialogPendingDir = getInnerDialogPendingDir;
40
+ exports.hasPendingMessages = hasPendingMessages;
41
+ exports.queuePendingMessage = queuePendingMessage;
42
+ exports.enqueueDeferredReturn = enqueueDeferredReturn;
43
+ exports.drainDeferredReturns = drainDeferredReturns;
37
44
  exports.drainPending = drainPending;
38
45
  const fs = __importStar(require("fs"));
39
46
  const path = __importStar(require("path"));
40
- const os = __importStar(require("os"));
47
+ const identity_1 = require("../heart/identity");
41
48
  const runtime_1 = require("../nerves/runtime");
42
49
  function getPendingDir(agentName, friendId, channel, key) {
43
- return path.join(os.homedir(), ".agentstate", agentName, "pending", friendId, channel, key);
50
+ return path.join((0, identity_1.getAgentRoot)(agentName), "state", "pending", friendId, channel, key);
44
51
  }
45
- function drainPending(pendingDir) {
52
+ function getDeferredReturnDir(agentName, friendId) {
53
+ return path.join((0, identity_1.getAgentRoot)(agentName), "state", "pending-returns", friendId);
54
+ }
55
+ /** Canonical inner-dialog pending path segments. */
56
+ exports.INNER_DIALOG_PENDING = { friendId: "self", channel: "inner", key: "dialog" };
57
+ /** Returns the pending dir for this agent's inner dialog. */
58
+ function getInnerDialogPendingDir(agentName) {
59
+ return getPendingDir(agentName, exports.INNER_DIALOG_PENDING.friendId, exports.INNER_DIALOG_PENDING.channel, exports.INNER_DIALOG_PENDING.key);
60
+ }
61
+ function hasPendingMessages(pendingDir) {
46
62
  if (!fs.existsSync(pendingDir))
47
- return [];
63
+ return false;
64
+ try {
65
+ return fs.readdirSync(pendingDir).some((entry) => entry.endsWith(".json") || entry.endsWith(".json.processing"));
66
+ }
67
+ catch {
68
+ return false;
69
+ }
70
+ }
71
+ function writeQueueFile(queueDir, message) {
72
+ fs.mkdirSync(queueDir, { recursive: true });
73
+ const fileName = `${message.timestamp}-${Math.random().toString(36).slice(2, 10)}.json`;
74
+ const filePath = path.join(queueDir, fileName);
75
+ fs.writeFileSync(filePath, JSON.stringify(message, null, 2));
76
+ return filePath;
77
+ }
78
+ function queuePendingMessage(pendingDir, message) {
79
+ writeQueueFile(pendingDir, message);
80
+ }
81
+ function drainQueue(queueDir) {
82
+ if (!fs.existsSync(queueDir))
83
+ return { messages: [], recovered: 0 };
48
84
  let entries;
49
85
  try {
50
- entries = fs.readdirSync(pendingDir);
86
+ entries = fs.readdirSync(queueDir);
51
87
  }
52
88
  catch {
53
- return [];
89
+ return { messages: [], recovered: 0 };
54
90
  }
55
91
  // Collect both .json (new) and .processing (crash recovery)
56
92
  const jsonFiles = entries.filter(f => f.endsWith(".json") && !f.endsWith(".processing"));
@@ -62,9 +98,9 @@ function drainPending(pendingDir) {
62
98
  ].sort((a, b) => a.file.localeCompare(b.file));
63
99
  const messages = [];
64
100
  for (const { file, needsRename } of allFiles) {
65
- const srcPath = path.join(pendingDir, file);
101
+ const srcPath = path.join(queueDir, file);
66
102
  const processingPath = needsRename
67
- ? path.join(pendingDir, file + ".processing")
103
+ ? path.join(queueDir, file + ".processing")
68
104
  : srcPath;
69
105
  try {
70
106
  if (needsRename) {
@@ -83,11 +119,42 @@ function drainPending(pendingDir) {
83
119
  catch { /* ignore */ }
84
120
  }
85
121
  }
122
+ return {
123
+ messages,
124
+ recovered: processingFiles.length,
125
+ };
126
+ }
127
+ function enqueueDeferredReturn(agentName, friendId, message) {
128
+ const queueDir = getDeferredReturnDir(agentName, friendId);
129
+ const filePath = writeQueueFile(queueDir, message);
130
+ (0, runtime_1.emitNervesEvent)({
131
+ event: "mind.deferred_return_enqueued",
132
+ component: "mind",
133
+ message: "deferred return queued for later friend delivery",
134
+ meta: { friendId, queueDir },
135
+ });
136
+ return filePath;
137
+ }
138
+ function drainDeferredReturns(agentName, friendId) {
139
+ const queueDir = getDeferredReturnDir(agentName, friendId);
140
+ const { messages } = drainQueue(queueDir);
141
+ (0, runtime_1.emitNervesEvent)({
142
+ event: "mind.deferred_returns_drained",
143
+ component: "mind",
144
+ message: "deferred friend returns drained",
145
+ meta: { friendId, queueDir, count: messages.length },
146
+ });
147
+ return messages;
148
+ }
149
+ function drainPending(pendingDir) {
150
+ if (!fs.existsSync(pendingDir))
151
+ return [];
152
+ const { messages, recovered } = drainQueue(pendingDir);
86
153
  (0, runtime_1.emitNervesEvent)({
87
154
  event: "mind.pending_drained",
88
155
  component: "mind",
89
156
  message: "pending queue drained",
90
- meta: { pendingDir, count: messages.length, recovered: processingFiles.length },
157
+ meta: { pendingDir, count: messages.length, recovered },
91
158
  });
92
159
  return messages;
93
160
  }
@@ -16,6 +16,7 @@ function getPhrases() {
16
16
  message: "loading phrase pools",
17
17
  meta: {},
18
18
  });
19
+ (0, identity_1.resetAgentConfigCache)();
19
20
  const phrases = (0, identity_1.loadAgentConfig)().phrases;
20
21
  (0, runtime_1.emitNervesEvent)({
21
22
  event: "repertoire.load_end",