@caupulican/pi-adaptative 0.90.7 → 0.90.11
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.
- package/CHANGELOG.md +49 -0
- package/dist/bundled-resources/skills/tool-call-repair/SKILL.md +5 -4
- package/dist/bundled-resources/skills/tool-call-repair/references/failure-grammar.md +6 -3
- package/dist/bundled-resources/skills/tool-call-repair/references/repair-catalogue.md +1 -0
- package/dist/core/agent-session-contracts.d.ts +2 -0
- package/dist/core/agent-session-contracts.d.ts.map +1 -1
- package/dist/core/agent-session-contracts.js.map +1 -1
- package/dist/core/agent-session.d.ts +8 -7
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +80 -196
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/autonomy/bounded-completion.d.ts +7 -1
- package/dist/core/autonomy/bounded-completion.d.ts.map +1 -1
- package/dist/core/autonomy/bounded-completion.js +8 -2
- package/dist/core/autonomy/bounded-completion.js.map +1 -1
- package/dist/core/autonomy/contracts.d.ts +1 -1
- package/dist/core/autonomy/contracts.d.ts.map +1 -1
- package/dist/core/autonomy/contracts.js.map +1 -1
- package/dist/core/background-lane-controller.d.ts +14 -0
- package/dist/core/background-lane-controller.d.ts.map +1 -1
- package/dist/core/background-lane-controller.js +32 -0
- package/dist/core/background-lane-controller.js.map +1 -1
- package/dist/core/billing-failover-controller.js +1 -1
- package/dist/core/billing-failover-controller.js.map +1 -1
- package/dist/core/context/current-work-memory.d.ts +1 -1
- package/dist/core/context/current-work-memory.d.ts.map +1 -1
- package/dist/core/context/current-work-memory.js +2 -1
- package/dist/core/context/current-work-memory.js.map +1 -1
- package/dist/core/context/long-term-memory-trigger.d.ts +1 -1
- package/dist/core/context/long-term-memory-trigger.d.ts.map +1 -1
- package/dist/core/context/long-term-memory-trigger.js +2 -1
- package/dist/core/context/long-term-memory-trigger.js.map +1 -1
- package/dist/core/delegation/managed-lane-controller.js +2 -2
- package/dist/core/delegation/managed-lane-controller.js.map +1 -1
- package/dist/core/delegation/worker-agent-control-coordinator.d.ts +13 -0
- package/dist/core/delegation/worker-agent-control-coordinator.d.ts.map +1 -1
- package/dist/core/delegation/worker-agent-control-coordinator.js +71 -8
- package/dist/core/delegation/worker-agent-control-coordinator.js.map +1 -1
- package/dist/core/delegation/worker-attempt-executor.d.ts.map +1 -1
- package/dist/core/delegation/worker-attempt-executor.js +13 -8
- package/dist/core/delegation/worker-attempt-executor.js.map +1 -1
- package/dist/core/delegation/worker-claim.d.ts.map +1 -1
- package/dist/core/delegation/worker-claim.js +14 -1
- package/dist/core/delegation/worker-claim.js.map +1 -1
- package/dist/core/delegation/worker-delegation-controller.d.ts +3 -2
- package/dist/core/delegation/worker-delegation-controller.d.ts.map +1 -1
- package/dist/core/delegation/worker-delegation-controller.js +95 -42
- package/dist/core/delegation/worker-delegation-controller.js.map +1 -1
- package/dist/core/delegation/worker-fleet-limits.d.ts.map +1 -1
- package/dist/core/delegation/worker-fleet-limits.js +5 -1
- package/dist/core/delegation/worker-fleet-limits.js.map +1 -1
- package/dist/core/delegation/worker-lane-projection.d.ts.map +1 -1
- package/dist/core/delegation/worker-lane-projection.js +7 -4
- package/dist/core/delegation/worker-lane-projection.js.map +1 -1
- package/dist/core/delegation/worker-lifecycle.d.ts +8 -0
- package/dist/core/delegation/worker-lifecycle.d.ts.map +1 -1
- package/dist/core/delegation/worker-lifecycle.js.map +1 -1
- package/dist/core/delegation/worker-notification-coordinator.d.ts +21 -0
- package/dist/core/delegation/worker-notification-coordinator.d.ts.map +1 -1
- package/dist/core/delegation/worker-notification-coordinator.js +65 -2
- package/dist/core/delegation/worker-notification-coordinator.js.map +1 -1
- package/dist/core/delegation/worker-runner.d.ts +7 -0
- package/dist/core/delegation/worker-runner.d.ts.map +1 -1
- package/dist/core/delegation/worker-runner.js +24 -7
- package/dist/core/delegation/worker-runner.js.map +1 -1
- package/dist/core/delegation/worker-system-prompt.d.ts +54 -0
- package/dist/core/delegation/worker-system-prompt.d.ts.map +1 -0
- package/dist/core/delegation/worker-system-prompt.js +85 -0
- package/dist/core/delegation/worker-system-prompt.js.map +1 -0
- package/dist/core/delegation/worker-tree-budget-coordinator.d.ts.map +1 -1
- package/dist/core/delegation/worker-tree-budget-coordinator.js +4 -0
- package/dist/core/delegation/worker-tree-budget-coordinator.js.map +1 -1
- package/dist/core/delegation/worker-write-reservation-coordinator.d.ts +4 -0
- package/dist/core/delegation/worker-write-reservation-coordinator.d.ts.map +1 -1
- package/dist/core/delegation/worker-write-reservation-coordinator.js +28 -1
- package/dist/core/delegation/worker-write-reservation-coordinator.js.map +1 -1
- package/dist/core/durable-custom-message-turn-controller.d.ts.map +1 -1
- package/dist/core/durable-custom-message-turn-controller.js +14 -3
- package/dist/core/durable-custom-message-turn-controller.js.map +1 -1
- package/dist/core/extension-binding-controller.d.ts +107 -0
- package/dist/core/extension-binding-controller.d.ts.map +1 -0
- package/dist/core/extension-binding-controller.js +224 -0
- package/dist/core/extension-binding-controller.js.map +1 -0
- package/dist/core/extensions/types.d.ts +2 -0
- package/dist/core/extensions/types.d.ts.map +1 -1
- package/dist/core/extensions/types.js.map +1 -1
- package/dist/core/foreground-terminal-handoff-controller.d.ts +9 -0
- package/dist/core/foreground-terminal-handoff-controller.d.ts.map +1 -1
- package/dist/core/foreground-terminal-handoff-controller.js +35 -9
- package/dist/core/foreground-terminal-handoff-controller.js.map +1 -1
- package/dist/core/goal-loop-controller.d.ts.map +1 -1
- package/dist/core/goal-loop-controller.js +10 -1
- package/dist/core/goal-loop-controller.js.map +1 -1
- package/dist/core/goals/compact-goal-context.d.ts +1 -1
- package/dist/core/goals/compact-goal-context.d.ts.map +1 -1
- package/dist/core/goals/compact-goal-context.js +2 -1
- package/dist/core/goals/compact-goal-context.js.map +1 -1
- package/dist/core/goals/goal-execution-errors.d.ts +18 -0
- package/dist/core/goals/goal-execution-errors.d.ts.map +1 -0
- package/dist/core/goals/goal-execution-errors.js +21 -0
- package/dist/core/goals/goal-execution-errors.js.map +1 -0
- package/dist/core/goals/goal-lifecycle.d.ts.map +1 -1
- package/dist/core/goals/goal-lifecycle.js +3 -3
- package/dist/core/goals/goal-lifecycle.js.map +1 -1
- package/dist/core/goals/goal-session-controller.d.ts +11 -0
- package/dist/core/goals/goal-session-controller.d.ts.map +1 -1
- package/dist/core/goals/goal-session-controller.js +74 -14
- package/dist/core/goals/goal-session-controller.js.map +1 -1
- package/dist/core/goals/goal-state.js +1 -1
- package/dist/core/goals/goal-state.js.map +1 -1
- package/dist/core/goals/goal-tool-core.d.ts.map +1 -1
- package/dist/core/goals/goal-tool-core.js +2 -2
- package/dist/core/goals/goal-tool-core.js.map +1 -1
- package/dist/core/goals/natural-language-goal.d.ts +18 -0
- package/dist/core/goals/natural-language-goal.d.ts.map +1 -1
- package/dist/core/goals/natural-language-goal.js +99 -16
- package/dist/core/goals/natural-language-goal.js.map +1 -1
- package/dist/core/model-registry.d.ts +5 -0
- package/dist/core/model-registry.d.ts.map +1 -1
- package/dist/core/model-registry.js +10 -0
- package/dist/core/model-registry.js.map +1 -1
- package/dist/core/model-resolver.d.ts.map +1 -1
- package/dist/core/model-resolver.js +3 -1
- package/dist/core/model-resolver.js.map +1 -1
- package/dist/core/orchestration/capability-gateway.d.ts +1 -1
- package/dist/core/orchestration/capability-gateway.d.ts.map +1 -1
- package/dist/core/orchestration/capability-gateway.js +4 -4
- package/dist/core/orchestration/capability-gateway.js.map +1 -1
- package/dist/core/orchestration/event-store.d.ts +8 -0
- package/dist/core/orchestration/event-store.d.ts.map +1 -1
- package/dist/core/orchestration/event-store.js +9 -7
- package/dist/core/orchestration/event-store.js.map +1 -1
- package/dist/core/orchestration/task-runtime-reducer.js +1 -1
- package/dist/core/orchestration/task-runtime-reducer.js.map +1 -1
- package/dist/core/orchestration/worker-model-pins.d.ts +7 -0
- package/dist/core/orchestration/worker-model-pins.d.ts.map +1 -1
- package/dist/core/orchestration/worker-model-pins.js +17 -1
- package/dist/core/orchestration/worker-model-pins.js.map +1 -1
- package/dist/core/provider-request-runtime-controller.d.ts +9 -0
- package/dist/core/provider-request-runtime-controller.d.ts.map +1 -1
- package/dist/core/provider-request-runtime-controller.js +17 -3
- package/dist/core/provider-request-runtime-controller.js.map +1 -1
- package/dist/core/provider-tool-text.d.ts +15 -1
- package/dist/core/provider-tool-text.d.ts.map +1 -1
- package/dist/core/provider-tool-text.js +42 -10
- package/dist/core/provider-tool-text.js.map +1 -1
- package/dist/core/research/research-lane-controller.d.ts +1 -1
- package/dist/core/research/research-lane-controller.d.ts.map +1 -1
- package/dist/core/research/research-lane-controller.js +2 -1
- package/dist/core/research/research-lane-controller.js.map +1 -1
- package/dist/core/resource-loader.d.ts +3 -0
- package/dist/core/resource-loader.d.ts.map +1 -1
- package/dist/core/resource-loader.js +8 -0
- package/dist/core/resource-loader.js.map +1 -1
- package/dist/core/runtime-builder.d.ts +8 -0
- package/dist/core/runtime-builder.d.ts.map +1 -1
- package/dist/core/runtime-builder.js +6 -0
- package/dist/core/runtime-builder.js.map +1 -1
- package/dist/core/session-supervision-runtime.d.ts.map +1 -1
- package/dist/core/session-supervision-runtime.js +2 -1
- package/dist/core/session-supervision-runtime.js.map +1 -1
- package/dist/core/settings-manager.d.ts +2 -2
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +7 -2
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/tools/delegate.d.ts +13 -0
- package/dist/core/tools/delegate.d.ts.map +1 -1
- package/dist/core/tools/delegate.js +20 -18
- package/dist/core/tools/delegate.js.map +1 -1
- package/dist/core/util/atomic-file.d.ts +7 -0
- package/dist/core/util/atomic-file.d.ts.map +1 -1
- package/dist/core/util/atomic-file.js +8 -6
- package/dist/core/util/atomic-file.js.map +1 -1
- package/dist/core/util/faultable-fs.d.ts +30 -0
- package/dist/core/util/faultable-fs.d.ts.map +1 -0
- package/dist/core/util/faultable-fs.js +30 -0
- package/dist/core/util/faultable-fs.js.map +1 -0
- package/dist/modes/interactive/auth-dialogs-controller.d.ts.map +1 -1
- package/dist/modes/interactive/auth-dialogs-controller.js +1 -0
- package/dist/modes/interactive/auth-dialogs-controller.js.map +1 -1
- package/dist/modes/interactive/components/activity-lane.d.ts.map +1 -1
- package/dist/modes/interactive/components/activity-lane.js +4 -3
- package/dist/modes/interactive/components/activity-lane.js.map +1 -1
- package/dist/modes/interactive/components/footer.js +1 -1
- package/dist/modes/interactive/components/footer.js.map +1 -1
- package/dist/modes/interactive/components/oauth-selector.d.ts +2 -0
- package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/oauth-selector.js +3 -2
- package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
- package/dist/modes/interactive/report-commands.js +1 -1
- package/dist/modes/interactive/report-commands.js.map +1 -1
- package/dist/modes/interactive/session-flow-commands.d.ts +1 -1
- package/dist/modes/interactive/session-flow-commands.d.ts.map +1 -1
- package/dist/modes/interactive/session-flow-commands.js +3 -2
- package/dist/modes/interactive/session-flow-commands.js.map +1 -1
- package/docs/providers.md +3 -0
- package/docs/settings.md +4 -2
- package/docs/tool-repair.md +1 -0
- package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
- package/examples/extensions/custom-provider-anthropic/package.json +1 -1
- package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
- package/examples/extensions/sandbox/package-lock.json +2 -2
- package/examples/extensions/sandbox/package.json +1 -1
- package/examples/extensions/with-deps/package-lock.json +2 -2
- package/examples/extensions/with-deps/package.json +1 -1
- package/npm-shrinkwrap.json +12 -12
- package/package.json +9 -4
|
@@ -11,36 +11,119 @@ const STANDALONE_GOAL_AUTHORITY_PATTERNS = [
|
|
|
11
11
|
/^\s*(?:this|that)\s+is\s+(?:now\s+)?a\s+(?:persistent\s+)?goal(?:\s+(?:with|using)\s+.+)?[.!]?\s*$/is,
|
|
12
12
|
/^\s*(?:make|treat)\s+this\s+(?:as\s+)?(?:my\s+|a\s+)?(?:persistent\s+)?goal(?:\s+(?:with|using)\s+.+)?[.!]?\s*$/is,
|
|
13
13
|
];
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
14
|
+
/** Raised when text unambiguously states a token-budget directive but the amount cannot be resolved
|
|
15
|
+
* to an exact positive integer. Callers must let this propagate as a loud, explicit failure instead
|
|
16
|
+
* of falling back to an unbounded goal. */
|
|
17
|
+
export class GoalTokenBudgetParseError extends Error {
|
|
18
|
+
constructor(message) {
|
|
19
|
+
super(message);
|
|
20
|
+
this.name = "GoalTokenBudgetParseError";
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
const TOKEN_UNIT_MULTIPLIERS = {
|
|
24
|
+
k: 1_000,
|
|
25
|
+
thousand: 1_000,
|
|
26
|
+
m: 1_000_000,
|
|
27
|
+
million: 1_000_000,
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* Resolve a matched numeral into a plain integer, disambiguating a thousands separator from a
|
|
31
|
+
* decimal point. Comma is never a decimal point in this grammar, so any comma-grouped digits
|
|
32
|
+
* (e.g. "5,000") are treated as a separator. A dot is genuinely ambiguous ("1.5" vs "1.000.000"),
|
|
33
|
+
* so it is only treated as a separator when the exactly-3-digit group repeats (e.g. "1.000.000");
|
|
34
|
+
* a single dot group falls back to a literal decimal (e.g. "1.5", or "1.000" read as 1).
|
|
35
|
+
*/
|
|
36
|
+
function normalizeTokenNumeral(raw) {
|
|
37
|
+
// The caller's capture regex allows "," "_" "." to continue a numeral (they can be internal
|
|
38
|
+
// separators), so it greedily swallows a trailing one that is NOT followed by more digits — e.g.
|
|
39
|
+
// the sentence-ending "." after a dot-grouped "1.000.000." A separator is only ever meaningful
|
|
40
|
+
// between digits, so a trailing one is always incidental punctuation; drop it before classifying.
|
|
41
|
+
const compact = raw.replace(/_/g, "").replace(/[,.]+$/, "");
|
|
42
|
+
if (/^[0-9]+$/.test(compact))
|
|
43
|
+
return Number(compact);
|
|
44
|
+
if (/^[0-9]{1,3}(,[0-9]{3})+\.[0-9]+$/.test(compact))
|
|
45
|
+
return Number(compact.replace(/,/g, ""));
|
|
46
|
+
if (/^[0-9]{1,3}(,[0-9]{3})+$/.test(compact))
|
|
47
|
+
return Number(compact.replace(/,/g, ""));
|
|
48
|
+
if (/^[0-9]{1,3}(\.[0-9]{3}){2,}$/.test(compact))
|
|
49
|
+
return Number(compact.replace(/\./g, ""));
|
|
50
|
+
if (/^[0-9]+\.[0-9]+$/.test(compact))
|
|
51
|
+
return Number(compact);
|
|
52
|
+
return undefined;
|
|
53
|
+
}
|
|
54
|
+
function parsePositiveTokenCount(raw, unit) {
|
|
55
|
+
const value = normalizeTokenNumeral(raw);
|
|
56
|
+
if (value === undefined)
|
|
57
|
+
return undefined;
|
|
58
|
+
const multiplier = unit ? (TOKEN_UNIT_MULTIPLIERS[unit.toLowerCase()] ?? 1) : 1;
|
|
17
59
|
const tokens = value * multiplier;
|
|
18
60
|
return Number.isSafeInteger(tokens) && tokens > 0 ? tokens : undefined;
|
|
19
61
|
}
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
62
|
+
const TOKEN_BUDGET_PATTERNS = [
|
|
63
|
+
/\btoken\s+budget\s*(?:of|is|:|=)?\s*([0-9][0-9,_.]*)(?:\s*(thousand|million|k|m)\b)?/i,
|
|
64
|
+
/\b([0-9][0-9,_.]*)(?:\s*(thousand|million|k|m)\b)?\s*(?:token|tokens)\s+budget\b/i,
|
|
65
|
+
/\bbudget\s*(?:of|is|:|=)?\s*([0-9][0-9,_.]*)(?:\s*(thousand|million|k|m)\b)?\s*(?:token|tokens)\b/i,
|
|
66
|
+
];
|
|
67
|
+
/**
|
|
68
|
+
* Scan `text` for one explicit token-budget directive. When `trailingOnly` is set, a match only
|
|
69
|
+
* counts if it runs to the end of `text` (ignoring closing punctuation/whitespace) — used to scan
|
|
70
|
+
* inside a captured goal objective, where a budget-shaped phrase embedded mid-sentence usually
|
|
71
|
+
* describes the task's subject matter (e.g. a constant being edited in code), not the agent's own
|
|
72
|
+
* execution ceiling, whereas a trailing clause ("... with a 40k token budget.") is a real directive.
|
|
73
|
+
*/
|
|
74
|
+
function scanTokenBudget(text, options) {
|
|
75
|
+
for (const pattern of TOKEN_BUDGET_PATTERNS) {
|
|
27
76
|
const match = pattern.exec(text);
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
77
|
+
if (!match)
|
|
78
|
+
continue;
|
|
79
|
+
if (options.trailingOnly) {
|
|
80
|
+
const tail = text.slice(match.index + match[0].length);
|
|
81
|
+
if (!/^[.!?]?\s*$/.test(tail))
|
|
82
|
+
continue;
|
|
83
|
+
}
|
|
84
|
+
const tokens = parsePositiveTokenCount(match[1], match[2]);
|
|
85
|
+
if (tokens === undefined) {
|
|
86
|
+
throw new GoalTokenBudgetParseError(`Token budget phrase "${match[0].trim()}" could not be parsed into an exact token ceiling.`);
|
|
87
|
+
}
|
|
88
|
+
return tokens;
|
|
31
89
|
}
|
|
32
90
|
return undefined;
|
|
33
91
|
}
|
|
92
|
+
/**
|
|
93
|
+
* Parse an explicit token-budget directive from `text`. When `objective` locates a captured goal
|
|
94
|
+
* objective within `text`, a budget-shaped phrase found INSIDE it only counts when it is the
|
|
95
|
+
* trailing clause of the objective; text outside the objective (the prefix/suffix around it) is
|
|
96
|
+
* scanned without that restriction. This keeps a genuine directive ("... with a 40k token budget.")
|
|
97
|
+
* working while refusing to adopt a number that is merely part of the task's own subject matter
|
|
98
|
+
* ("raise the model token budget of 4096 ... to 8192").
|
|
99
|
+
*/
|
|
100
|
+
export function parseRequestedTokenBudget(text, objective) {
|
|
101
|
+
if (!objective)
|
|
102
|
+
return scanTokenBudget(text, { trailingOnly: false });
|
|
103
|
+
const outside = `${text.slice(0, objective.start)} ${text.slice(objective.end)}`;
|
|
104
|
+
const outsideBudget = scanTokenBudget(outside, { trailingOnly: false });
|
|
105
|
+
if (outsideBudget !== undefined)
|
|
106
|
+
return outsideBudget;
|
|
107
|
+
return scanTokenBudget(text.slice(objective.start, objective.end), { trailingOnly: true });
|
|
108
|
+
}
|
|
34
109
|
/**
|
|
35
110
|
* Recognize only explicit persistence language. Ordinary multi-step work and discussion ABOUT goal
|
|
36
111
|
* mechanics deliberately return undefined; those must not silently expand into autonomous work.
|
|
37
112
|
*/
|
|
38
113
|
export function parseExplicitChatGoal(text) {
|
|
39
114
|
for (const pattern of EXPLICIT_GOAL_PATTERNS) {
|
|
40
|
-
const
|
|
41
|
-
|
|
115
|
+
const match = pattern.exec(text);
|
|
116
|
+
const rawObjective = match?.[1];
|
|
117
|
+
const objective = rawObjective?.trim();
|
|
118
|
+
if (!match || !objective || objective.length > MAX_GOAL_OBJECTIVE_LENGTH)
|
|
42
119
|
continue;
|
|
43
|
-
|
|
120
|
+
// rawObjective is always a suffix of match[0] (every pattern ends in `(.+)$`), so its start
|
|
121
|
+
// offset in `text` is match[0]'s length minus its own length.
|
|
122
|
+
const objectiveSpan = {
|
|
123
|
+
start: match.index + (match[0].length - (rawObjective?.length ?? 0)),
|
|
124
|
+
end: match.index + match[0].length,
|
|
125
|
+
};
|
|
126
|
+
const tokenBudget = parseRequestedTokenBudget(text, objectiveSpan);
|
|
44
127
|
return { objective, ...(tokenBudget !== undefined ? { tokenBudget } : {}) };
|
|
45
128
|
}
|
|
46
129
|
return undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"natural-language-goal.js","sourceRoot":"","sources":["../../../src/core/goals/natural-language-goal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAW5D,MAAM,sBAAsB,GAAG;IAC9B,+EAA+E;IAC/E,gDAAgD;IAChD,8DAA8D;IAC9D,mEAAmE;IACnE,2EAA2E;IAC3E,0EAA0E;CACjE,CAAC;AAEX,MAAM,kCAAkC,GAAG;IAC1C,sGAAsG;IACtG,mHAAmH;CAC1G,CAAC;AAEX,SAAS,uBAAuB,CAAC,GAAW,EAAE,MAA0B;IACvE,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;IAC/C,MAAM,UAAU,GAAG,MAAM,EAAE,WAAW,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACzG,MAAM,MAAM,GAAG,KAAK,GAAG,UAAU,CAAC;IAClC,OAAO,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;AACxE,CAAC;AAED,SAAS,yBAAyB,CAAC,IAAY;IAC9C,MAAM,QAAQ,GAAG;QAChB,gEAAgE;QAChE,0DAA0D;QAC1D,2EAA2E;KAClE,CAAC;IACX,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAChC,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjC,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC/E,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO,MAAM,CAAC;IACzC,CAAC;IACD,OAAO,SAAS,CAAC;AAClB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAAY;IACjD,KAAK,MAAM,OAAO,IAAI,sBAAsB,EAAE,CAAC;QAC9C,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;QAClD,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,MAAM,GAAG,yBAAyB;YAAE,SAAS;QACzE,MAAM,WAAW,GAAG,yBAAyB,CAAC,IAAI,CAAC,CAAC;QACpD,OAAO,EAAE,SAAS,EAAE,GAAG,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IAC7E,CAAC;IACD,OAAO,SAAS,CAAC;AAClB,CAAC;AAED,2GAA2G;AAC3G,MAAM,UAAU,+BAA+B,CAAC,IAAY;IAC3D,MAAM,IAAI,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;IACzC,IAAI,IAAI;QAAE,OAAO,IAAI,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;IACzF,IAAI,CAAC,kCAAkC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAAE,OAAO,SAAS,CAAC;IAChG,MAAM,WAAW,GAAG,yBAAyB,CAAC,IAAI,CAAC,CAAC;IACpD,OAAO,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC;AACzD,CAAC","sourcesContent":["import { MAX_GOAL_OBJECTIVE_LENGTH } from \"./goal-state.ts\";\n\nexport interface ExplicitChatGoal {\n\tobjective: string;\n\ttokenBudget?: number;\n}\n\nexport interface ExplicitGoalStartAuthority {\n\ttokenBudget?: number;\n}\n\nconst EXPLICIT_GOAL_PATTERNS = [\n\t/^\\s*set\\s+(?:this\\s+as\\s+)?a\\s+(?:persistent\\s+)?goal\\s*(?::|to\\s+)\\s*(.+)$/is,\n\t/^\\s*my\\s+persistent\\s+goal\\s+is\\s+to\\s+(.+)$/is,\n\t/^\\s*(?:the|our)\\s+(?:persistent\\s+)?goal\\s+is\\s+to\\s+(.+)$/is,\n\t/^\\s*treat\\s+this\\s+as\\s+my\\s+(?:persistent\\s+)?goal\\s*:\\s*(.+)$/is,\n\t/^\\s*i\\s+want\\s+this\\s+as\\s+(?:my\\s+)?(?:persistent\\s+)?goal\\s*:\\s*(.+)$/is,\n\t/^\\s*keep\\s+working\\s+until\\s+this\\s+is\\s+(?:complete|done)\\s*:\\s*(.+)$/is,\n] as const;\n\nconst STANDALONE_GOAL_AUTHORITY_PATTERNS = [\n\t/^\\s*(?:this|that)\\s+is\\s+(?:now\\s+)?a\\s+(?:persistent\\s+)?goal(?:\\s+(?:with|using)\\s+.+)?[.!]?\\s*$/is,\n\t/^\\s*(?:make|treat)\\s+this\\s+(?:as\\s+)?(?:my\\s+|a\\s+)?(?:persistent\\s+)?goal(?:\\s+(?:with|using)\\s+.+)?[.!]?\\s*$/is,\n] as const;\n\nfunction parsePositiveTokenCount(raw: string, suffix: string | undefined): number | undefined {\n\tconst value = Number(raw.replace(/[,_]/g, \"\"));\n\tconst multiplier = suffix?.toLowerCase() === \"m\" ? 1_000_000 : suffix?.toLowerCase() === \"k\" ? 1_000 : 1;\n\tconst tokens = value * multiplier;\n\treturn Number.isSafeInteger(tokens) && tokens > 0 ? tokens : undefined;\n}\n\nfunction parseRequestedTokenBudget(text: string): number | undefined {\n\tconst patterns = [\n\t\t/\\btoken\\s+budget\\s*(?:of|is|:|=)?\\s*([0-9][0-9,_.]*)([km])?\\b/i,\n\t\t/\\b([0-9][0-9,_.]*)([km])?\\s*(?:token|tokens)\\s+budget\\b/i,\n\t\t/\\bbudget\\s*(?:of|is|:|=)?\\s*([0-9][0-9,_.]*)([km])?\\s*(?:token|tokens)\\b/i,\n\t] as const;\n\tfor (const pattern of patterns) {\n\t\tconst match = pattern.exec(text);\n\t\tconst tokens = match ? parsePositiveTokenCount(match[1], match[2]) : undefined;\n\t\tif (tokens !== undefined) return tokens;\n\t}\n\treturn undefined;\n}\n\n/**\n * Recognize only explicit persistence language. Ordinary multi-step work and discussion ABOUT goal\n * mechanics deliberately return undefined; those must not silently expand into autonomous work.\n */\nexport function parseExplicitChatGoal(text: string): ExplicitChatGoal | undefined {\n\tfor (const pattern of EXPLICIT_GOAL_PATTERNS) {\n\t\tconst objective = pattern.exec(text)?.[1]?.trim();\n\t\tif (!objective || objective.length > MAX_GOAL_OBJECTIVE_LENGTH) continue;\n\t\tconst tokenBudget = parseRequestedTokenBudget(text);\n\t\treturn { objective, ...(tokenBudget !== undefined ? { tokenBudget } : {}) };\n\t}\n\treturn undefined;\n}\n\n/** Exact owner authority for model-facing goal creation; ordinary work and meta-discussion fail closed. */\nexport function parseExplicitGoalStartAuthority(text: string): ExplicitGoalStartAuthority | undefined {\n\tconst goal = parseExplicitChatGoal(text);\n\tif (goal) return goal.tokenBudget === undefined ? {} : { tokenBudget: goal.tokenBudget };\n\tif (!STANDALONE_GOAL_AUTHORITY_PATTERNS.some((pattern) => pattern.test(text))) return undefined;\n\tconst tokenBudget = parseRequestedTokenBudget(text);\n\treturn tokenBudget === undefined ? {} : { tokenBudget };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"natural-language-goal.js","sourceRoot":"","sources":["../../../src/core/goals/natural-language-goal.ts"],"names":[],"mappings":"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","sourcesContent":["import { MAX_GOAL_OBJECTIVE_LENGTH } from \"./goal-state.ts\";\n\nexport interface ExplicitChatGoal {\n\tobjective: string;\n\ttokenBudget?: number;\n}\n\nexport interface ExplicitGoalStartAuthority {\n\ttokenBudget?: number;\n}\n\nconst EXPLICIT_GOAL_PATTERNS = [\n\t/^\\s*set\\s+(?:this\\s+as\\s+)?a\\s+(?:persistent\\s+)?goal\\s*(?::|to\\s+)\\s*(.+)$/is,\n\t/^\\s*my\\s+persistent\\s+goal\\s+is\\s+to\\s+(.+)$/is,\n\t/^\\s*(?:the|our)\\s+(?:persistent\\s+)?goal\\s+is\\s+to\\s+(.+)$/is,\n\t/^\\s*treat\\s+this\\s+as\\s+my\\s+(?:persistent\\s+)?goal\\s*:\\s*(.+)$/is,\n\t/^\\s*i\\s+want\\s+this\\s+as\\s+(?:my\\s+)?(?:persistent\\s+)?goal\\s*:\\s*(.+)$/is,\n\t/^\\s*keep\\s+working\\s+until\\s+this\\s+is\\s+(?:complete|done)\\s*:\\s*(.+)$/is,\n] as const;\n\nconst STANDALONE_GOAL_AUTHORITY_PATTERNS = [\n\t/^\\s*(?:this|that)\\s+is\\s+(?:now\\s+)?a\\s+(?:persistent\\s+)?goal(?:\\s+(?:with|using)\\s+.+)?[.!]?\\s*$/is,\n\t/^\\s*(?:make|treat)\\s+this\\s+(?:as\\s+)?(?:my\\s+|a\\s+)?(?:persistent\\s+)?goal(?:\\s+(?:with|using)\\s+.+)?[.!]?\\s*$/is,\n] as const;\n\n/** Raised when text unambiguously states a token-budget directive but the amount cannot be resolved\n * to an exact positive integer. Callers must let this propagate as a loud, explicit failure instead\n * of falling back to an unbounded goal. */\nexport class GoalTokenBudgetParseError extends Error {\n\tconstructor(message: string) {\n\t\tsuper(message);\n\t\tthis.name = \"GoalTokenBudgetParseError\";\n\t}\n}\n\nconst TOKEN_UNIT_MULTIPLIERS: Record<string, number> = {\n\tk: 1_000,\n\tthousand: 1_000,\n\tm: 1_000_000,\n\tmillion: 1_000_000,\n};\n\n/**\n * Resolve a matched numeral into a plain integer, disambiguating a thousands separator from a\n * decimal point. Comma is never a decimal point in this grammar, so any comma-grouped digits\n * (e.g. \"5,000\") are treated as a separator. A dot is genuinely ambiguous (\"1.5\" vs \"1.000.000\"),\n * so it is only treated as a separator when the exactly-3-digit group repeats (e.g. \"1.000.000\");\n * a single dot group falls back to a literal decimal (e.g. \"1.5\", or \"1.000\" read as 1).\n */\nfunction normalizeTokenNumeral(raw: string): number | undefined {\n\t// The caller's capture regex allows \",\" \"_\" \".\" to continue a numeral (they can be internal\n\t// separators), so it greedily swallows a trailing one that is NOT followed by more digits — e.g.\n\t// the sentence-ending \".\" after a dot-grouped \"1.000.000.\" A separator is only ever meaningful\n\t// between digits, so a trailing one is always incidental punctuation; drop it before classifying.\n\tconst compact = raw.replace(/_/g, \"\").replace(/[,.]+$/, \"\");\n\tif (/^[0-9]+$/.test(compact)) return Number(compact);\n\tif (/^[0-9]{1,3}(,[0-9]{3})+\\.[0-9]+$/.test(compact)) return Number(compact.replace(/,/g, \"\"));\n\tif (/^[0-9]{1,3}(,[0-9]{3})+$/.test(compact)) return Number(compact.replace(/,/g, \"\"));\n\tif (/^[0-9]{1,3}(\\.[0-9]{3}){2,}$/.test(compact)) return Number(compact.replace(/\\./g, \"\"));\n\tif (/^[0-9]+\\.[0-9]+$/.test(compact)) return Number(compact);\n\treturn undefined;\n}\n\nfunction parsePositiveTokenCount(raw: string, unit: string | undefined): number | undefined {\n\tconst value = normalizeTokenNumeral(raw);\n\tif (value === undefined) return undefined;\n\tconst multiplier = unit ? (TOKEN_UNIT_MULTIPLIERS[unit.toLowerCase()] ?? 1) : 1;\n\tconst tokens = value * multiplier;\n\treturn Number.isSafeInteger(tokens) && tokens > 0 ? tokens : undefined;\n}\n\nconst TOKEN_BUDGET_PATTERNS = [\n\t/\\btoken\\s+budget\\s*(?:of|is|:|=)?\\s*([0-9][0-9,_.]*)(?:\\s*(thousand|million|k|m)\\b)?/i,\n\t/\\b([0-9][0-9,_.]*)(?:\\s*(thousand|million|k|m)\\b)?\\s*(?:token|tokens)\\s+budget\\b/i,\n\t/\\bbudget\\s*(?:of|is|:|=)?\\s*([0-9][0-9,_.]*)(?:\\s*(thousand|million|k|m)\\b)?\\s*(?:token|tokens)\\b/i,\n] as const;\n\n/**\n * Scan `text` for one explicit token-budget directive. When `trailingOnly` is set, a match only\n * counts if it runs to the end of `text` (ignoring closing punctuation/whitespace) — used to scan\n * inside a captured goal objective, where a budget-shaped phrase embedded mid-sentence usually\n * describes the task's subject matter (e.g. a constant being edited in code), not the agent's own\n * execution ceiling, whereas a trailing clause (\"... with a 40k token budget.\") is a real directive.\n */\nfunction scanTokenBudget(text: string, options: { trailingOnly: boolean }): number | undefined {\n\tfor (const pattern of TOKEN_BUDGET_PATTERNS) {\n\t\tconst match = pattern.exec(text);\n\t\tif (!match) continue;\n\t\tif (options.trailingOnly) {\n\t\t\tconst tail = text.slice(match.index + match[0].length);\n\t\t\tif (!/^[.!?]?\\s*$/.test(tail)) continue;\n\t\t}\n\t\tconst tokens = parsePositiveTokenCount(match[1], match[2]);\n\t\tif (tokens === undefined) {\n\t\t\tthrow new GoalTokenBudgetParseError(\n\t\t\t\t`Token budget phrase \"${match[0].trim()}\" could not be parsed into an exact token ceiling.`,\n\t\t\t);\n\t\t}\n\t\treturn tokens;\n\t}\n\treturn undefined;\n}\n\n/**\n * Parse an explicit token-budget directive from `text`. When `objective` locates a captured goal\n * objective within `text`, a budget-shaped phrase found INSIDE it only counts when it is the\n * trailing clause of the objective; text outside the objective (the prefix/suffix around it) is\n * scanned without that restriction. This keeps a genuine directive (\"... with a 40k token budget.\")\n * working while refusing to adopt a number that is merely part of the task's own subject matter\n * (\"raise the model token budget of 4096 ... to 8192\").\n */\nexport function parseRequestedTokenBudget(\n\ttext: string,\n\tobjective?: { start: number; end: number },\n): number | undefined {\n\tif (!objective) return scanTokenBudget(text, { trailingOnly: false });\n\tconst outside = `${text.slice(0, objective.start)} ${text.slice(objective.end)}`;\n\tconst outsideBudget = scanTokenBudget(outside, { trailingOnly: false });\n\tif (outsideBudget !== undefined) return outsideBudget;\n\treturn scanTokenBudget(text.slice(objective.start, objective.end), { trailingOnly: true });\n}\n\n/**\n * Recognize only explicit persistence language. Ordinary multi-step work and discussion ABOUT goal\n * mechanics deliberately return undefined; those must not silently expand into autonomous work.\n */\nexport function parseExplicitChatGoal(text: string): ExplicitChatGoal | undefined {\n\tfor (const pattern of EXPLICIT_GOAL_PATTERNS) {\n\t\tconst match = pattern.exec(text);\n\t\tconst rawObjective = match?.[1];\n\t\tconst objective = rawObjective?.trim();\n\t\tif (!match || !objective || objective.length > MAX_GOAL_OBJECTIVE_LENGTH) continue;\n\t\t// rawObjective is always a suffix of match[0] (every pattern ends in `(.+)$`), so its start\n\t\t// offset in `text` is match[0]'s length minus its own length.\n\t\tconst objectiveSpan = {\n\t\t\tstart: match.index + (match[0].length - (rawObjective?.length ?? 0)),\n\t\t\tend: match.index + match[0].length,\n\t\t};\n\t\tconst tokenBudget = parseRequestedTokenBudget(text, objectiveSpan);\n\t\treturn { objective, ...(tokenBudget !== undefined ? { tokenBudget } : {}) };\n\t}\n\treturn undefined;\n}\n\n/** Exact owner authority for model-facing goal creation; ordinary work and meta-discussion fail closed. */\nexport function parseExplicitGoalStartAuthority(text: string): ExplicitGoalStartAuthority | undefined {\n\tconst goal = parseExplicitChatGoal(text);\n\tif (goal) return goal.tokenBudget === undefined ? {} : { tokenBudget: goal.tokenBudget };\n\tif (!STANDALONE_GOAL_AUTHORITY_PATTERNS.some((pattern) => pattern.test(text))) return undefined;\n\tconst tokenBudget = parseRequestedTokenBudget(text);\n\treturn tokenBudget === undefined ? {} : { tokenBudget };\n}\n"]}
|
|
@@ -194,6 +194,11 @@ export declare class ModelRegistry {
|
|
|
194
194
|
* Check if a model is using OAuth credentials (subscription).
|
|
195
195
|
*/
|
|
196
196
|
isUsingOAuth(model: Model<Api>): boolean;
|
|
197
|
+
/**
|
|
198
|
+
* Check if a model is using OAuth credentials backed by an actual provider subscription
|
|
199
|
+
* (as opposed to OAuth that merely mints a permanent API key, e.g. OpenRouter).
|
|
200
|
+
*/
|
|
201
|
+
isUsingSubscription(model: Model<Api>): boolean;
|
|
197
202
|
/**
|
|
198
203
|
* Register a provider dynamically (from extensions).
|
|
199
204
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-registry.d.ts","sourceRoot":"","sources":["../../src/core/model-registry.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"model-registry.d.ts","sourceRoot":"","sources":["../../src/core/model-registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -693,6 +693,16 @@ export class ModelRegistry {
|
|
|
693
693
|
const cred = this.authStorage.get(model.provider);
|
|
694
694
|
return cred?.type === "oauth";
|
|
695
695
|
}
|
|
696
|
+
/**
|
|
697
|
+
* Check if a model is using OAuth credentials backed by an actual provider subscription
|
|
698
|
+
* (as opposed to OAuth that merely mints a permanent API key, e.g. OpenRouter).
|
|
699
|
+
*/
|
|
700
|
+
isUsingSubscription(model) {
|
|
701
|
+
if (!this.isUsingOAuth(model))
|
|
702
|
+
return false;
|
|
703
|
+
const oauthProvider = this.authStorage.getOAuthProviders().find((p) => p.id === model.provider);
|
|
704
|
+
return oauthProvider?.isSubscription === true;
|
|
705
|
+
}
|
|
696
706
|
/**
|
|
697
707
|
* Register a provider dynamically (from extensions).
|
|
698
708
|
*
|