@noodleseed/one 0.187.0 → 0.189.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 (77) hide show
  1. package/dist/commands/solutions-conversations.js +1 -1
  2. package/dist/commands/solutions-conversations.js.map +1 -1
  3. package/dist/commands/solutions-history.d.ts.map +1 -1
  4. package/dist/commands/solutions-history.js +5 -2
  5. package/dist/commands/solutions-history.js.map +1 -1
  6. package/dist/commands/whatsapp-ops.d.ts +1 -1
  7. package/dist/commands/whatsapp-ops.d.ts.map +1 -1
  8. package/dist/commands/whatsapp-ops.js +31 -9
  9. package/dist/commands/whatsapp-ops.js.map +1 -1
  10. package/dist/commands/whatsapp-output.d.ts +1 -1
  11. package/dist/commands/whatsapp-output.d.ts.map +1 -1
  12. package/dist/commands/whatsapp-output.js +8 -6
  13. package/dist/commands/whatsapp-output.js.map +1 -1
  14. package/node_modules/@noodle-borg/agent-kit/dist/behavior-skills.js +19 -35
  15. package/node_modules/@noodle-borg/agent-kit/dist/generated/example-files.js +2 -2
  16. package/node_modules/@noodle-borg/agent-kit/dist/index.d.ts +0 -1
  17. package/node_modules/@noodle-borg/agent-kit/dist/index.js +9 -27
  18. package/node_modules/@noodle-borg/agent-kit/dist/plugin-bootstrap-skill.js +1 -10
  19. package/node_modules/@noodle-borg/agent-kit/dist/skill-authoring-split.js +68 -0
  20. package/node_modules/@noodle-borg/agent-kit/dist/skill-content.js +38 -4
  21. package/node_modules/@noodle-borg/agent-kit/dist/skill-embedded-assistant-ref.js +7 -5
  22. package/node_modules/@noodle-borg/agent-kit/dist/skill-embedded-assistant-split.js +68 -0
  23. package/node_modules/@noodle-borg/agent-kit/dist/skill-existing-app-ref.js +1 -1
  24. package/node_modules/@noodle-borg/agent-kit/dist/skill-router.d.ts +3 -2
  25. package/node_modules/@noodle-borg/agent-kit/dist/skill-router.js +11 -99
  26. package/node_modules/@noodle-borg/agent-kit/dist/skill-server-playbook-ref.js +1 -1
  27. package/node_modules/@noodle-borg/agent-kit/dist/skill-verification-ref.js +2 -2
  28. package/node_modules/@noodle-borg/agent-kit/package.json +1 -1
  29. package/node_modules/@noodle-borg/assistant-gateway/dist/assistant-model-context.js +1 -0
  30. package/node_modules/@noodle-borg/assistant-gateway/dist/channel-coordinator.d.ts +89 -0
  31. package/node_modules/@noodle-borg/assistant-gateway/dist/channel-coordinator.js +20 -1
  32. package/node_modules/@noodle-borg/assistant-gateway/dist/channel-inbox.js +16 -1
  33. package/node_modules/@noodle-borg/assistant-gateway/dist/channel-store.d.ts +1 -1
  34. package/node_modules/@noodle-borg/assistant-gateway/dist/channel-types.d.ts +34 -3
  35. package/node_modules/@noodle-borg/assistant-gateway/dist/channel-types.js +10 -4
  36. package/node_modules/@noodle-borg/authoring/dist/assistant.d.ts +1 -1
  37. package/node_modules/@noodle-borg/authoring/dist/assistant.js +1 -1
  38. package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-channels.js +26 -0
  39. package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-solution-conversations.js +1 -1
  40. package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-solution-history.js +1 -0
  41. package/node_modules/@noodle-borg/compiler/dist/manifest/schema.d.ts +4 -0
  42. package/node_modules/@noodle-borg/compiler/dist/manifest/schema.js +1 -1
  43. package/node_modules/@noodle-borg/compiler/dist/manifest/website-projection.d.ts +1 -0
  44. package/node_modules/@noodle-borg/compiler/dist/manifest/website-projection.js +11 -2
  45. package/node_modules/@noodle-borg/runtime/dist/connector/types.d.ts +1 -1
  46. package/node_modules/@noodle-borg/service/dist/application-history-settings.js +2 -0
  47. package/node_modules/@noodle-borg/service/dist/build-info.js +1 -0
  48. package/node_modules/@noodle-borg/service/dist/channels/composition.js +3 -2
  49. package/node_modules/@noodle-borg/service/dist/channels/messaging-eligibility.js +6 -1
  50. package/node_modules/@noodle-borg/service/dist/channels/reply-bound.js +4 -0
  51. package/node_modules/@noodle-borg/service/dist/channels/runtime.js +38 -10
  52. package/node_modules/@noodle-borg/service/dist/channels/twilio-sms.js +188 -0
  53. package/node_modules/@noodle-borg/service/dist/channels/twilio-webhook.js +16 -0
  54. package/node_modules/@noodle-borg/service/dist/conversation-history/contracts.js +1 -0
  55. package/node_modules/@noodle-borg/service/dist/routes/business-information-channels.js +3 -1
  56. package/node_modules/@noodle-borg/service/dist/routes/service-probes.js +1 -0
  57. package/node_modules/@noodle-borg/service/dist/routes/sms-twilio.js +66 -0
  58. package/node_modules/@noodle-borg/service/dist/routes/whatsapp.js +31 -21
  59. package/node_modules/@noodle-borg/service/dist/service.js +2 -2
  60. package/node_modules/@noodle-borg/service/package.json +1 -1
  61. package/node_modules/@noodle-borg/wire-contracts/dist/application-channels.d.ts +33 -0
  62. package/node_modules/@noodle-borg/wire-contracts/dist/application-channels.js +3 -1
  63. package/node_modules/@noodle-borg/wire-contracts/dist/application-history-settings.d.ts +7 -0
  64. package/node_modules/@noodle-borg/wire-contracts/dist/application-history-settings.js +2 -1
  65. package/node_modules/@noodle-borg/wire-contracts/dist/conversation-history.d.ts +12 -0
  66. package/node_modules/@noodle-borg/wire-contracts/dist/conversation-history.js +1 -1
  67. package/node_modules/@noodle-borg/wire-contracts/dist/index.d.ts +1 -0
  68. package/node_modules/@noodle-borg/wire-contracts/dist/index.js +1 -0
  69. package/node_modules/@noodle-borg/wire-contracts/dist/service-info.d.ts +2 -0
  70. package/node_modules/@noodle-borg/wire-contracts/dist/service-info.js +2 -0
  71. package/node_modules/@noodle-borg/wire-contracts/dist/sms.d.ts +176 -0
  72. package/node_modules/@noodle-borg/wire-contracts/dist/sms.js +41 -0
  73. package/node_modules/@noodle-borg/wire-contracts/dist/whatsapp.d.ts +10 -2
  74. package/node_modules/@noodle-borg/wire-contracts/dist/whatsapp.js +2 -1
  75. package/package.json +2 -2
  76. package/node_modules/@noodle-borg/agent-kit/dist/plan-execution-skill.d.ts +0 -10
  77. package/node_modules/@noodle-borg/agent-kit/dist/plan-execution-skill.js +0 -56
@@ -0,0 +1,176 @@
1
+ import { z } from 'zod';
2
+ export declare const SmsConfigureRequestSchema: z.ZodObject<{
3
+ apiKeySecret: z.ZodString;
4
+ capabilities: z.ZodArray<z.ZodObject<{
5
+ kind: z.ZodEnum<{
6
+ tool: "tool";
7
+ knowledge: "knowledge";
8
+ }>;
9
+ name: z.ZodString;
10
+ }, z.core.$strict>>;
11
+ supportEmail: z.ZodEmail;
12
+ limits: z.ZodOptional<z.ZodObject<{
13
+ perMinute: z.ZodOptional<z.ZodNumber>;
14
+ perHour: z.ZodOptional<z.ZodNumber>;
15
+ perDay: z.ZodOptional<z.ZodNumber>;
16
+ channelPerDay: z.ZodOptional<z.ZodNumber>;
17
+ newParticipantsPerDay: z.ZodOptional<z.ZodNumber>;
18
+ concurrent: z.ZodOptional<z.ZodNumber>;
19
+ pendingPerParticipant: z.ZodOptional<z.ZodNumber>;
20
+ pending: z.ZodOptional<z.ZodNumber>;
21
+ textCharacters: z.ZodOptional<z.ZodNumber>;
22
+ dailyMicroUsd: z.ZodOptional<z.ZodNumber>;
23
+ }, z.core.$strict>>;
24
+ accountSid: z.ZodString;
25
+ phoneNumberSid: z.ZodString;
26
+ phoneNumber: z.ZodString;
27
+ expectedRevision: z.ZodNumber;
28
+ }, z.core.$strict>;
29
+ export declare const SmsBindingSchema: z.ZodObject<{
30
+ createdAt: z.ZodNumber;
31
+ id: z.ZodString;
32
+ state: z.ZodEnum<{
33
+ paused: "paused";
34
+ enabled: "enabled";
35
+ disconnected: "disconnected";
36
+ }>;
37
+ revision: z.ZodNumber;
38
+ capabilities: z.ZodArray<z.ZodObject<{
39
+ kind: z.ZodEnum<{
40
+ tool: "tool";
41
+ knowledge: "knowledge";
42
+ }>;
43
+ name: z.ZodString;
44
+ }, z.core.$strict>>;
45
+ deploymentId: z.ZodString;
46
+ updatedAt: z.ZodNumber;
47
+ generation: z.ZodNumber;
48
+ limits: z.ZodObject<{
49
+ perMinute: z.ZodNumber;
50
+ perHour: z.ZodNumber;
51
+ perDay: z.ZodNumber;
52
+ channelPerDay: z.ZodNumber;
53
+ newParticipantsPerDay: z.ZodNumber;
54
+ concurrent: z.ZodNumber;
55
+ pendingPerParticipant: z.ZodNumber;
56
+ pending: z.ZodNumber;
57
+ textCharacters: z.ZodNumber;
58
+ dailyMicroUsd: z.ZodNumber;
59
+ }, z.core.$strict>;
60
+ apiKeySecret: z.ZodString;
61
+ supportEmail: z.ZodEmail;
62
+ tenant: z.ZodObject<{
63
+ org: z.ZodString;
64
+ app: z.ZodString;
65
+ env: z.ZodString;
66
+ }, z.core.$strict>;
67
+ actor: z.ZodString;
68
+ readyRevision: z.ZodOptional<z.ZodNumber>;
69
+ readyAt: z.ZodOptional<z.ZodNumber>;
70
+ accountSid: z.ZodString;
71
+ phoneNumberSid: z.ZodString;
72
+ phoneNumber: z.ZodString;
73
+ channel: z.ZodLiteral<"sms">;
74
+ provider: z.ZodLiteral<"twilio">;
75
+ }, z.core.$strict>;
76
+ export declare const SmsBindingResponseSchema: z.ZodObject<{
77
+ ok: z.ZodLiteral<true>;
78
+ data: z.ZodNullable<z.ZodObject<{
79
+ createdAt: z.ZodNumber;
80
+ id: z.ZodString;
81
+ state: z.ZodEnum<{
82
+ paused: "paused";
83
+ enabled: "enabled";
84
+ disconnected: "disconnected";
85
+ }>;
86
+ revision: z.ZodNumber;
87
+ capabilities: z.ZodArray<z.ZodObject<{
88
+ kind: z.ZodEnum<{
89
+ tool: "tool";
90
+ knowledge: "knowledge";
91
+ }>;
92
+ name: z.ZodString;
93
+ }, z.core.$strict>>;
94
+ deploymentId: z.ZodString;
95
+ updatedAt: z.ZodNumber;
96
+ generation: z.ZodNumber;
97
+ limits: z.ZodObject<{
98
+ perMinute: z.ZodNumber;
99
+ perHour: z.ZodNumber;
100
+ perDay: z.ZodNumber;
101
+ channelPerDay: z.ZodNumber;
102
+ newParticipantsPerDay: z.ZodNumber;
103
+ concurrent: z.ZodNumber;
104
+ pendingPerParticipant: z.ZodNumber;
105
+ pending: z.ZodNumber;
106
+ textCharacters: z.ZodNumber;
107
+ dailyMicroUsd: z.ZodNumber;
108
+ }, z.core.$strict>;
109
+ apiKeySecret: z.ZodString;
110
+ supportEmail: z.ZodEmail;
111
+ tenant: z.ZodObject<{
112
+ org: z.ZodString;
113
+ app: z.ZodString;
114
+ env: z.ZodString;
115
+ }, z.core.$strict>;
116
+ actor: z.ZodString;
117
+ readyRevision: z.ZodOptional<z.ZodNumber>;
118
+ readyAt: z.ZodOptional<z.ZodNumber>;
119
+ accountSid: z.ZodString;
120
+ phoneNumberSid: z.ZodString;
121
+ phoneNumber: z.ZodString;
122
+ channel: z.ZodLiteral<"sms">;
123
+ provider: z.ZodLiteral<"twilio">;
124
+ }, z.core.$strict>>;
125
+ }, z.core.$strict>;
126
+ export declare const SmsBindingClientResponseSchema: z.ZodObject<{
127
+ ok: z.ZodLiteral<true>;
128
+ data: z.ZodNullable<z.ZodObject<{
129
+ createdAt: z.ZodNumber;
130
+ id: z.ZodString;
131
+ state: z.ZodEnum<{
132
+ paused: "paused";
133
+ enabled: "enabled";
134
+ disconnected: "disconnected";
135
+ }>;
136
+ revision: z.ZodNumber;
137
+ deploymentId: z.ZodString;
138
+ updatedAt: z.ZodNumber;
139
+ generation: z.ZodNumber;
140
+ apiKeySecret: z.ZodString;
141
+ supportEmail: z.ZodEmail;
142
+ actor: z.ZodString;
143
+ readyRevision: z.ZodOptional<z.ZodNumber>;
144
+ readyAt: z.ZodOptional<z.ZodNumber>;
145
+ accountSid: z.ZodString;
146
+ phoneNumberSid: z.ZodString;
147
+ phoneNumber: z.ZodString;
148
+ channel: z.ZodLiteral<"sms">;
149
+ provider: z.ZodLiteral<"twilio">;
150
+ tenant: z.ZodObject<{
151
+ org: z.ZodString;
152
+ app: z.ZodString;
153
+ env: z.ZodString;
154
+ }, z.core.$strip>;
155
+ capabilities: z.ZodArray<z.ZodObject<{
156
+ kind: z.ZodEnum<{
157
+ tool: "tool";
158
+ knowledge: "knowledge";
159
+ }>;
160
+ name: z.ZodString;
161
+ }, z.core.$strip>>;
162
+ limits: z.ZodObject<{
163
+ perMinute: z.ZodNumber;
164
+ perHour: z.ZodNumber;
165
+ perDay: z.ZodNumber;
166
+ channelPerDay: z.ZodNumber;
167
+ newParticipantsPerDay: z.ZodNumber;
168
+ concurrent: z.ZodNumber;
169
+ pendingPerParticipant: z.ZodNumber;
170
+ pending: z.ZodNumber;
171
+ textCharacters: z.ZodNumber;
172
+ dailyMicroUsd: z.ZodNumber;
173
+ }, z.core.$strip>;
174
+ }, z.core.$strip>>;
175
+ }, z.core.$strip>;
176
+ //# sourceMappingURL=sms.d.ts.map
@@ -0,0 +1,41 @@
1
+ import { z } from 'zod';
2
+ import { WhatsAppBindingSchema, WhatsAppLimitsSchema } from './whatsapp.js';
3
+ const shape = WhatsAppBindingSchema.shape;
4
+ const asset = {
5
+ accountSid: z.string().regex(/^AC[a-fA-F0-9]{32}$/),
6
+ phoneNumberSid: z.string().regex(/^PN[a-fA-F0-9]{32}$/),
7
+ phoneNumber: z.string().regex(/^\+[1-9]\d{1,14}$/),
8
+ };
9
+ export const SmsConfigureRequestSchema = z.strictObject({
10
+ expectedRevision: shape.revision,
11
+ ...asset,
12
+ apiKeySecret: shape.apiKeySecret,
13
+ capabilities: shape.capabilities.max(64),
14
+ supportEmail: z.email().max(254),
15
+ limits: WhatsAppLimitsSchema.partial().optional(),
16
+ });
17
+ export const SmsBindingSchema = WhatsAppBindingSchema.omit({
18
+ provider: true,
19
+ phoneNumberId: true,
20
+ wabaId: true,
21
+ webhookSecret: true,
22
+ }).extend({
23
+ channel: z.literal('sms'),
24
+ provider: z.literal('twilio'),
25
+ ...asset,
26
+ });
27
+ export const SmsBindingResponseSchema = z.strictObject({
28
+ ok: z.literal(true),
29
+ data: SmsBindingSchema.nullable(),
30
+ });
31
+ export const SmsBindingClientResponseSchema = z.object({
32
+ ok: z.literal(true),
33
+ data: SmsBindingSchema.extend({
34
+ tenant: shape.tenant.strip(),
35
+ capabilities: z.array(shape.capabilities.element.strip()),
36
+ limits: WhatsAppLimitsSchema.strip(),
37
+ })
38
+ .strip()
39
+ .nullable(),
40
+ });
41
+ //# sourceMappingURL=sms.js.map
@@ -405,7 +405,11 @@ export declare const WhatsAppBlocksResponseSchema: z.ZodObject<{
405
405
  data: z.ZodArray<z.ZodObject<{
406
406
  participantId: z.ZodString;
407
407
  actor: z.ZodString;
408
- reason: z.ZodLiteral<"operator">;
408
+ reason: z.ZodEnum<{
409
+ operator: "operator";
410
+ recipient_opt_out: "recipient_opt_out";
411
+ }>;
412
+ optedOut: z.ZodOptional<z.ZodBoolean>;
409
413
  local: z.ZodBoolean;
410
414
  until: z.ZodNullable<z.ZodNumber>;
411
415
  provider: z.ZodOptional<z.ZodObject<{
@@ -431,7 +435,11 @@ export declare const WhatsAppBlocksClientResponseSchema: z.ZodObject<{
431
435
  data: z.ZodArray<z.ZodObject<{
432
436
  participantId: z.ZodString;
433
437
  actor: z.ZodString;
434
- reason: z.ZodLiteral<"operator">;
438
+ reason: z.ZodEnum<{
439
+ operator: "operator";
440
+ recipient_opt_out: "recipient_opt_out";
441
+ }>;
442
+ optedOut: z.ZodOptional<z.ZodBoolean>;
435
443
  local: z.ZodBoolean;
436
444
  until: z.ZodNullable<z.ZodNumber>;
437
445
  provider: z.ZodOptional<z.ZodObject<{
@@ -222,7 +222,8 @@ export const WhatsAppEventsClientResponseSchema = z.object({
222
222
  const block = z.strictObject({
223
223
  participantId: id,
224
224
  actor: id,
225
- reason: z.literal('operator'),
225
+ reason: z.enum(['operator', 'recipient_opt_out']),
226
+ optedOut: z.boolean().optional(),
226
227
  local: z.boolean(),
227
228
  until: z.number().nullable(),
228
229
  provider: z
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@noodleseed/one",
3
- "version": "0.187.0",
3
+ "version": "0.189.0",
4
4
  "private": false,
5
5
  "description": "Noodle CLI by Noodle Seed — author, run, and deploy declarative MCP servers. Embedding the assistant in your own web app is @noodleseed/assistant.",
6
6
  "license": "Apache-2.0",
@@ -236,7 +236,7 @@
236
236
  "@modelcontextprotocol/client": "2.0.0",
237
237
  "@modelcontextprotocol/server": "2.0.0",
238
238
  "@noodle-borg/admission-limits": "0.0.0",
239
- "@noodle-borg/agent-kit": "0.111.0",
239
+ "@noodle-borg/agent-kit": "0.113.0",
240
240
  "@noodle-borg/app-audit": "0.0.0",
241
241
  "@noodle-borg/app-package": "0.0.0",
242
242
  "@noodle-borg/assistant-gateway": "0.0.0",
@@ -1,10 +0,0 @@
1
- import type { AgentTarget } from './skill-registry.js';
2
- export declare const EXECUTING_NOODLE_PLANS_SKILL: {
3
- readonly name: "executing-noodle-plans";
4
- readonly description: "Use when the user asks to execute an approved, decision-complete implementation plan for a Noodle Seed project task by task with test-first changes, review, recovery, and final verification.";
5
- readonly supportedHosts: readonly ["codex", "claude-code"];
6
- readonly files: readonly [];
7
- readonly renderBody: typeof renderExecutingNoodlePlansSkill;
8
- };
9
- export declare function renderExecutingNoodlePlansSkill(_target?: AgentTarget): string;
10
- //# sourceMappingURL=plan-execution-skill.d.ts.map
@@ -1,56 +0,0 @@
1
- export const EXECUTING_NOODLE_PLANS_SKILL = {
2
- name: 'executing-noodle-plans',
3
- description: 'Use when the user asks to execute an approved, decision-complete implementation plan for a Noodle Seed project task by task with test-first changes, review, recovery, and final verification.',
4
- supportedHosts: ['codex', 'claude-code'],
5
- files: [],
6
- renderBody: renderExecutingNoodlePlansSkill,
7
- };
8
- export function renderExecutingNoodlePlansSkill(_target) {
9
- return [
10
- '# Execute a Noodle Seed implementation plan',
11
- '',
12
- 'Execute an approved plan without reopening settled design decisions. Keep implementation, review, and evidence scoped to the current repository and the authority the user granted.',
13
- '',
14
- '## Preconditions',
15
- '',
16
- '- Read the plan, repository instructions, current branch status, and the files named by the first incomplete task.',
17
- '- Confirm the plan is decision-complete, test-first, compatible with the current code, and explicit about public contracts and required verification.',
18
- '- Work in the repository-required isolated branch or worktree and preserve unrelated changes.',
19
- '- If current code invalidates the plan or two requirements conflict, stop before editing and ask which requirement governs.',
20
- '',
21
- '## Task loop',
22
- '',
23
- 'Execute one task at a time in plan order:',
24
- '',
25
- '1. Restate the task boundary, expected behavior, focused failing test, and files in scope.',
26
- '2. Add or update the focused test first and run it to confirm the expected failure when practical.',
27
- '3. Implement only the behavior required to make that test pass. Do not add compatibility paths, abstractions, or adjacent cleanup the plan did not require.',
28
- '4. Run the focused test, then the package-level checks named by the plan.',
29
- '5. Review the task diff for plan compliance, correctness, security, type safety, and unnecessary surface area.',
30
- '6. Record completion in the plan checkbox when it is writable and in a focused conventional commit.',
31
- '',
32
- 'When the active host provides isolated task workers and user authorization permits delegation, use a fresh implementer for an independent task and a separate reviewer after it. Give each worker only the task requirements, binding global constraints, file paths, and required evidence. Never run workers in parallel when their files or contracts overlap. Execute inline when workers are unavailable, tasks are tightly coupled, or delegation is not authorized.',
33
- '',
34
- '## Review and recovery',
35
- '',
36
- '- Independent review must compare the task requirements with the exact task diff and test evidence; implementer self-review does not replace it when a reviewer is available.',
37
- '- Return concrete findings to the implementer, rerun the tests that cover each correction, and review the correction diff again.',
38
- '- Allow at most three correction rounds for the same finding. Then stop with the unresolved requirement, attempted fixes, and current evidence instead of silently accepting drift.',
39
- '- On context loss or interruption, resume from the plan checkboxes, git status, and git log; verify the last completed task before starting the first incomplete one.',
40
- '',
41
- '## Completion',
42
- '',
43
- '- Review the complete branch diff against the plan and all accepted design constraints.',
44
- '- Run the focused tests, affected package checks, generated-surface checks, and the repository readiness gate.',
45
- '- For Noodle application behavior, also run the validation, test, check, preview, or hosted evidence level selected by the owning Noodle Seed build or verification skill.',
46
- '- Report commits, evidence, residual risk, and the first unproven layer. Do not claim deployment, publication, merge, or production behavior that was not performed.',
47
- '- Hand delivery to the repository workflow; executing a plan does not itself authorize merge, deploy, publication, or other external mutation.',
48
- '',
49
- '## Stop conditions',
50
- '',
51
- '- Stop before implementation when the plan is incomplete or stale in a way that changes behavior, architecture, security, or public contracts.',
52
- '- Stop after three unsuccessful correction rounds on the same load-bearing finding.',
53
- '- Stop before any external mutation or destructive action outside the user-authorized task boundary.',
54
- ].join('\n');
55
- }
56
- //# sourceMappingURL=plan-execution-skill.js.map